---
title: "工場と団体"
slug: "factories-and-entities"
abstract: "工場および事業体の概要。"
---
# 工場と団体

ファクトリーメソッドパターンは、ファクトリーの概念を実装したオブジェクト指向のクリエイショナルデザインパターンです。特定のクラスを基にしなくてもオブジェクトを作成できます。このパターンの核は、オブジェクトを作成するためのインターフェースを定義しつつ、そのインターフェースを実装するクラスがどのクラスをインスタンス化するか決めることです。ファクトリーメソッドは、クラスがインスタンス化をサブクラスに延期できるようにします。

エンティティファクトリーを設定するには、タイプを設定します。デフォルトでは、SitecoreファクトリーはConnectを通じて暗に使用されます:

<!-- ENTITY FACTORY Creates an entity by entity name. Allows to substitute default entity
with extended one. -->
<entityFactory type="Sitecore.Commerce.Entities.EntityFactory, Sitecore.Commerce.Connect.Core"
singleInstance="true" />

Sitecore.Commerce.Carts.configファイルでカスタムオブジェクトを設定するには:

<!-- Connect ENTITIES Contains all the Connect entities. The configuration can be used to
substitute the default entity implementation with extended one. -->
<commerce.Entities>
 <CartBase type="Sitecore.Commerce.Entities.Carts.CartBase, Sitecore.Commerce.Connect.Core" />
 <Cart type="Sitecore.Commerce.Entities.Carts.Cart, Sitecore.Commerce.Connect.Core" />
</commerce.Entities>

実際のConnectプロバイダー実装では、カスタムオブジェクトは既知であり、必ずしもFactoryを使って作成する必要はありません。

例えば、いくつかのプロセッサでは工場への参照をパラメータとして使うことができます。 CreateCart:

<processor type="Sitecore.Commerce.Pipelines.Carts.CreateCart.CreateCart, Sitecore.Commerce.Connect.Core">
 <param ref="entityFactory" />
</processor>

必要なタイプのインスタンスを取得するにはFactory.Createメソッドを使う必要があります。例えば、以下のコードスニペットでは、カートを工場に呼び出してカートを作成・返送する必要があります。カートドメインモデルは完全に修正・カスタマイズ可能で、デフォルトのカートタイプを自分の実装に置き換えることができます。

public override void Process(ServicePipelineArgs args)
{
 var result = (CartResult)args.Result;
 var cart = this.entityFactory.Create<Cart>("Cart");
 var request = (CreateOrResumeCartRequest)args.Request;
 cart.UserId = request.UserId;
 cart.ShopName = request.ShopName;
 cart.CartName = request.CartName;
 cart.CustomerId = request.CustomerId;
 cart.CartStatus = CartStatus.InProcess;
 result.Cart = cart;
}