---
title: "リポジトリ設計パターン"
slug: "repository-design-pattern"
abstract: ""
---
# リポジトリ設計パターン

Sitecoreコンテンツにデータを書き込む各Connectプロセッサはリポジトリ設計パターンに基づいており、 Sitecore.Commerce.Products.configファイル内に対応する構成エントリを持っています。以下のコードスニペットでは、ManufacturerRepositoryのデフォルト構成が表示されます。

<manufacturerRepository type="Sitecore.Commerce.Data.Products.ManufacturerRepository, Sitecore.Commerce" singleInstance="true">
<path ref="paths/manufacturers" />
<template>{8ECDC0A6-3A85-4F89-8F49-8A53AA75595E}</template>
<prefix>Manufacturer\_</prefix>
</manufacturerRepository>

すべてのリポジトリ構成に共通する点は以下の通りです:

-   名前と実装を示す型属性です。名前は要素名であり、命名方式は次の通りです:\[単数形のエンティティ名\] + Repository、例えば manufacturerRepository。
-   メイン要素を参照し、リポジトリのルートがどこにあるかを指定する<path>パラメータ要素。
-   リポジトリが動作するテンプレートのIDを含む <template> パラメータ要素。テンプレートは、特定のアイテムタイプの新しいインスタンスを作成する際に使用されます。
-   <prefix>パラメータ要素で、任意の固定プレフィックスをIDGeneratorの入力として使用し、外部IDとともに結果が一意のGUID IDであることを保証します(これは一意のアイテムIDとして使用可能です)。詳細については、「[カスタムIDジェネレーターの実装](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/implement-a-custom-id-generator.html "Implement a custom ID generator")」を参照してください。

「product」で始まる名前の特別なリポジトリタイプも存在します。これらのリポジトリタイプは別リポジトリにデータを保存せず、代わりにメイン製品エンティティを補完し、それぞれのリポジトリへの参照を補強します。例えば、productManufacturerRepositoryリポジトリは製品アイテムと関連するメーカー製品間の参照を管理する責任を負っています。 productManufacturerRepositoryの設定は以下のコードスニペットに示されています。

テンプレートやパス要素の代わりに、コードスニペットは <param> 要素を使って、製品アイテムの参照(例えばアイテムID)を保持するフィールド名を指定します。これは関連するメーカーへの参照です。これらのリポジトリは適切なアイテムIDを生成する必要があるため、<manufacturerRepository>の構成で同じプレフィックスが使われていることを知る必要があります。

<productManufacturerRepository type="Sitecore.Commerce.Data.Products.ProductFieldRepository, Sitecore.Commerce" singleInstance="true">
<param desc="productFieldName">Manufacturer</param>
<param desc="productPrefix">Product\_</param>
<path ref="paths/manufacturers" />
<prefix>Manufacturer\_</prefix>
</productManufacturerRepository>

> !注パイプライン内でSitecoreのエンティティを保存するために使われるだけでなく、リポジトリはIDを提供することで指定されたタイプのオブジェクトインスタンスを取得するために利用できます。

すべてのリポジトリは、IDを入力として受け取り、与えられたエンティティタイプのインスタンスを返すメソッドを提供しています。

public virtual TEntity Get(string entityKey)
Retrieving a specific product looks like this:
var product = this.productRepository.Get("external id");