再次 - 我感到困惑的事情DDD :)每個實體的一項服務?
我有architeture(我還在努力),在很短的手看起來像這樣:
DataLayer:
EntityDao -> Implementing domain layer interfaces (NHibernate)
DomainLayer:
EntityRepository -> Repository for each entity with injected Dao
DomainObjects/Entitys -> Some logic
UI
ASP.Net MVC
而我現在正在那裏我覺得要創建和使用一些Service類。我有一些問題:
1.我應該爲每個實體/域對象創建至少一個服務嗎?
2.a.Should服務有「查詢」的方法,如查找,FIndAll,FindAll(LINQQuery)?
2.b.Should我應該停止使用上層(UI)中的Repositorys來獲取實體的集合(「查找」樣方法)並開始只使用服務?
3.如果對2個問題的回答是否 - 我應該以並行方式使用服務和存儲庫(在UI中時,我只需要獲取所有實體的使用Repository.FindAll,當我需要獲得一些「邏輯」列表該實體的我使用Service.FindXXX方法)?
4.我覺得Repositorys不適合在域層 - 我應該將它們分開嗎?在DOMAIN中只保留域特定的對象,如實體和服務?如果是 - 給我一些結構示例如何實現這一點。某些對象的
例子:
道:
public class NHibernateDao<T> : IDao<T>
{
public NHibernateDao() { }
public T Get(object id)
{
T entity = (T)NHibernateSession.Get(entityType, id);
return entity;
}
public T Load(object id)
{
T entity = (T)NHibernateSession.Load(entityType, id);
return entity;
}
public virtual T Update(T entity)
{
NHibernateSession.Update(entity);
return entity;
}
...
庫:
public class BaseRepository<T>:IRepository<T>
{
private DataInterfaces.IDao<T> mDao;
public virtual T Get(object id)
{
return mDao.Get(id);
}
public virtual void Delete(T entity)
{
mDao.Delete(entity);
}
public virtual T Update(T entity)
{
return mDao.Update(entity);
}
public virtual IQueryable<T> FindAll()
{
return mDao.FindAll();
}
...
域對象,此刻,它的主要的get/set容器 - 這個問題的背景是去除貧血模型。
你能舉一個EntityDao,EntityRepository和Entity的例子嗎? – Marijn
啊,很明顯。如果這就是DAO和Repository的含義,那麼Kostassoid是對的,它們實際上是一樣的。 – Marijn