2009-07-22 24 views
4

依存オブジェクトを削除/削除しないロジックはDDDに属していますか?例えばドメイン駆動設計(DDD)で依存オブジェクトを削除するロジックはどこにありますか?

1は、製品が含まれているカテゴリがあります。

class Category 
{ 
    IList<Products> products; 
} 

ルールは、それが何の製品を持っていない場合を除き、カテゴリが削除できないことかもしれません。

ロジックはどこに属しますか?削除する前にこのカテゴリの製品がないことを確認しますか?

  • ドメインクラス - ビジネスロジックと思われるので、ドメインレイヤに属していると推測します。
  • リポジトリクラス - リポジトリレイヤは永続性を処理します。削除のためのCRUDメソッドを含む一般的なCRUDメソッドがあり、ロジックはこのレイヤに属していますか?
  • 別の解決策はありますか?

答えて

2

ソフトウェアデザインに関するほとんどのアイデアのように、DDDは厳格ではなく厳格なルールであるため、実際のDDDであるかどうかについては心配しないでください。ほとんどのソフトウェアシナリオと同様に、答えは「それは依存している」ということです。

このシナリオでは、Specificationを使用することを検討してください。

Category category; // some category you're working with. 
ICategoryRepository _categoryRepository; // some repository. 

ISpecification readyForRemoval = new ReadyForRemovalSpecification(); 

if (readyForRemoval.IsSatisfiedBy(category) 
{ 
    _categoryRepository.Remove(category); 
} 

public class ReadyForRemovalSpecification : ISpecification<Category> 
{ 
    public bool IsSatisfiedBy(Category category) 
    { 
    return (category.HasProducts == false); 
    // return category.Products.Count = 0; // whatever... 
    } 
} 
+0

"return!category.HasProducts;"おそらく? –

+1

@Bryan Watts、OT&FYI:読まれるべきであり実行されないコードを書くとき、私はしばしば "!x"の代わりに "x == false"を使うことを好む。 「カテゴリには商品がありません」という表現は、「カテゴリには商品がありません」というよりも、「偽の商品になります」と読む方が良いと思います。ただ個人的な好み。現実のシナリオでは、私は!category.HasProductsを使用します。 –

+0

@KevinSwiber私はこれが古い投稿だと知っていますが、あなたが提供したコードはどこに置かれるべきですか?ドメイン層またはサービス層?ありがとう –

0

通常、集合ルートは子エンティティの有効期間を管理します。

関連する問題