次のようないくつかのエンティティがあるソフトウェアを開発しています。
public class Workspace
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual List<Playground> Playground { get; set; }
public virtual List<Workspace> Children { get; set; }
public virtual List<Member> Members { get; set; }
public virtual Workspace Parent { get; set; }
}
public class Playground
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual List<Service> Services { get; set; }
public virtual Workspace Workspace { get; set; }
}
public class Service
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual Playground Playground { get; set; }
}
これらは私の EF4 POCO オブジェクトです。リポジトリ パターンと次のインターフェイスを使用しています。
public interface IRepository<T>
{
void Add(T entity);
void Delete(T entity);
IEnumerable<T> Get(Expression<Func<T, bool>> expression);
IEnumerable<T> Get();
void Attach(T entity);
int Save();
}
リポジトリには内部 ObjectContext があります。私のリポジトリのインスタンスを含む UnitOfWork があり、それらに加えられた変更を保存する責任があります。
私はこれまでのところ正しくやっていますか?
次のようなビジネス ロジック レイヤーを実装しています。
public class DomainWorkspaceService : DomainServiceBase
{
public DomainWorkspaceService(Workspace workspace)
: base(UnitOfWorkFactory.GetInstance())
{
}
public void Create(Workspace workspace)
{
UoW.GetRepository<Workspace>().Add(workspace);
}
public void Delete(Workspace workspace)
{
var pservice = new DomainPlaygroundService();
foreach (var playground in workspace.Playground)
pservice.Delete(playground);
foreach (var child in workspace.Children)
Delete(child);
}
}
今、私は正しい方向に進んでいるかどうか確信が持てません。私のPOCOは検証を担当しており、次のようなことができるようになります
SomeWorkspace.Children.Add(new Workspace {...});
これらのオブジェクトはコンテキストに関連付けられているため、それらを保存すると、コレクションへの変更もデータベースに保存されますか?
また、プレイグラウンドなしではワークスペースとサービスなしでプレイグラウンドを作成できないようにしたいと考えています。それらをどこで作成および削除する必要がありますか?
ありがとう。