我試圖避免此類ContentDomain成爲神級和隔離功能集成到特定的類別(按照SRP)這樣設計模式的選擇域/業務層
ContentDomain:
public class ContentDomain : IContentDomain
{
private ISolutionDomain solutionDomain;
private IServiceDomain serviceDomain;
private IPhaseDomain phaseDomain;
public ContentDomain(IUnitOfWork _unitOfWork)
{
this.solutionDomain = new SolutionDomain(_unitOfWork);
this.serviceDomain = new ServiceDomain(_unitOfWork);
this.phaseDomain = new PhaseDomain(_unitOfWork);
}
public ISolutionDomain SolutionDomain { get { return solutionDomain; } }
public IServiceDomain ServiceDomain { get { return serviceDomain; } }
public IPhaseDomain PhaseDomain { get { return phaseDomain; } }
}
一個特定的領域類的
public class SolutionDomain : BaseDomain, ISolutionDomain
{
public SolutionDomain(IUnitOfWork _unitOfWork)
: base(_unitOfWork)
{
}
public IEnumerable<Solution> GetAllSolutions()
{
return base.GetAll<Solution>(sol => sol.IsActive == true).OrderBy(rec => rec.Name).Select(rec => rec).ToList();
}
}
而且現在我的控制器只知道ContentDomain和從SolutionDomain/ServiceDomain/PhaseDomain調用具體方法爲,並在需要的時候:
public ContentController(IContentDomain domain, ICurrentUser currentUser)
: base(domain, currentUser)
{
}
public ActionResult Home()
{
var myServices = domain.ServiceDomain.GetServicesWithDetails(rec => rec.CreatedBy == currentUser.Name);
var viewModelCollection = myServices.Select(service => new DashboardViewModel(service, domain));
if (currentUser.IsInRole("SU"))
return View("Home_SU", viewModelCollection);
else if (currentUser.IsInRole("Reviewer"))
return View("Home_Reviewer", viewModelCollection);
else return View("Home", viewModelCollection);
}
請注意,在首頁的第一條語句()
domain.ServiceDomain.GetServicesWithDetails(rec => rec.CreatedBy == currentUser.Name);
我發現自己混合門面和ContentDomain類中的組合。
現在的問題是 -
- 是否合理使用組成直通門面公開特定域的功能?
- 如果不是的話,那可能是什麼情況?
- 機會我違反了這種方法的任何固體原則?
我覺得很難理解這個問題,因爲它太抽象了(一切都是一個界面)。除了'currentUser.Name'之外,我並不真正看到你所暴露的「特定域功能」。你的問題3太寬泛。設計是各種各樣的妥協,所以答案很可能(在一個複雜的項目中)在某處違反了SOLID。 TL; DR你的問題需要更加具體才能得到答案。 – Fuhrmanator
SolutionDomain類表示作爲domain公開的特定域功能。解決方案域 –