6

ORMを使用していません。それで、「保存」メソッドが実際にビジネスドメインエンティティに属しているのか、それとも保存のためにビジネスドメインエンティティに渡されるサービスで抽象化する必要があるのか​​について議論しています。

例えば

class Employee
{
    string Name;
    DateTime Birth;

    GetAge()
    {

    }

    Save()
    {
    }           

}

また

class Employee
{   
    string Name;
    DateTime Birth;

    GetAge()
    {

    }


}

SomePersistenceService
{
    Save(Employee emp)
        {
        }
}
4

2 に答える 2

4

最善の解決策は1つではありません。あなたが述べた問題は、リポジトリとアクティブレコードのパターンのどちらを選択するかです。

一般に、リポジトリインターフェイスは簡単にモック可能であるため、リポジトリは単体テストに適しています。また、リポジトリパターンは、高い凝集度と単一責任の原則を使用します(OOPの観点からは、ビジネスエンティティに自分自身を保存するためのコードが含まれることは奇妙に思えるかもしれません。データベース、ネットワーク経由での転送、または一部のXMLへのエクスポートなど)

Active RecordはRAD開発の速度を上げる可能性があり、SpringRooのようないくつかのツールは最初はActiveRecordのみをサポートするように設計されていましたが、リポジトリのサポートは最近追加されました。AFAIK Ruby On Railsは、Active Record、およびその他の優れたツールも使用しています。

ドメイン駆動設計に関しては、リポジトリは基本的なDDDパターン(DAOパターンのドメイン中心バージョン)であるため、Jeroenが提案したようにリポジトリを使用する必要がありますが、ツールがいずれかのパターンを直接サポートしているかどうかを確認する必要があります。

于 2012-07-24T12:12:10.187 に答える
2

この質問は「ドメイン駆動設計」でタグ付けされているため、それを行うためのリポジトリが必要になります。


SomePersistenceServiceの名前をEmployeeRepositoryに変更するだけです。したがって、2番目のオプションで正しい方向に進んでいました。「ビジネスドメインエンティティに引き渡されるいくつかのサービスに抽象化された」は、ドメイン駆動設計ではリポジトリと呼ばれます

リポジトリは、データストアがコレクションであるかのように見せかける方法です。Addしたがって、 andRemoveの代わりにSaveandのようなメソッドがありDeleteます。

于 2012-07-23T15:11:43.650 に答える