对于我的开发选择,我是 NTiers 的忠实粉丝,当然它并不适合所有场景。
我目前正在做一个新项目,我正在尝试以我通常的工作方式进行游戏,并尝试看看我是否可以清理它。因为我一直是一个非常糟糕的男孩,并且在表示层中放置了太多代码。
我正常的业务层结构是这样的(它的基本观点):
- 商业
- 服务
- FooComponent
- FooHelpers
- FooWorkflows
- Bah组件
- BahHelpers
- Bah工作流
- FooComponent
- 实用程序
- 常见的
- 异常处理程序
- 进口商
- ETC...
- 服务
现在有了上面的内容,我可以通过它们各自的助手直接保存 Foo 对象和 Bah 对象。
XXXHelpers 让我可以访问保存、编辑和加载相应的对象,但是我应该将逻辑与子对象一起保存在哪里。
例如:
我们有以下对象(我知道不是很好的对象)
- 员工
- 员工详情
- 员工会员
- 员工简介
目前我会在表示层构建这些,然后将它们传递给他们的助手,我觉得这是错误的,我认为数据应该传递到业务层某个地方的表示之上的一个点并在那里进行整理。
但是我有点不知所措,我将把这个逻辑放在哪里以及如何称呼这个部门,它会作为 EmployeeManager 或类似的东西归入 Utilities 下吗?
你会怎么办?我知道这都是偏好。
更详细的布局
工作流包含直接对 DataRepository 的所有调用,例如:
public ObjectNameGetById(Guid id)
{
return DataRepository.ObjectNameProvider.GetById(id);
}
然后助手提供对工作流的访问:
public ObjectName GetById(Guid id)
{
return loadWorkflow.GetById(id);
}
这是为了减少重复代码,因为您可以在工作流中调用一次 getBySomeProperty,然后在 Helper 中调用几次,这些调用可以执行其他操作并以不同方式返回数据,一个不好的例子是 public GetByIdAsc 和 GetByIdDesc
通过使用 DataRepository 分离对数据模型的调用,这意味着可以将模型换成另一个实例(这是想法),但 ProviderHelper 尚未分解,因此它不可互换,因为它是不幸的是,硬编码到 EF。我不打算改变访问技术,但将来可能会有更好的东西,或者只是所有酷孩子现在都在使用的东西,我可能想要实现。
项目名称.Core
projectName.Business
- Interfaces
- IDeleteWorkflows.cs
- ILoadWorkflows.cs
- ISaveWorkflows.cs
- IServiceHelper.cs
- IServiceViewHelper.cs
- Services
- ObjectNameComponent
- Helpers
- ObjectNameHelper.cs
- Workflows
- DeleteObjectNameWorkflow.cs
- LoadObjectNameWorkflow.cs
- SaveObjectNameWorkflow.cs
- Utilities
- Common
- SettingsManager.cs
- JavascriptManager.cs
- XmlHelper.cs
- others...
- ExceptionHandlers
- ExceptionManager.cs
- ExceptionManagerFactory.cs
- ExceptionNotifier.cs
projectName.Data
- Bases
- ObjectNameProviderBase.cs
- Helpers
- ProviderHelper.cs
- Interfaces
- IProviderBase.cs
- DataRepository.cs
projectName.Data.Model
- Database.edmx
projectName.Entities (Entities that represent the DB tables are created by EF in .Data.Model, this is for others that I may need that are not related to the database)
- Helpers
- EnumHelper.cs
项目名称.演示文稿
(取决于应用程序的调用是什么)
projectName.web
projectName.mvc
projectName.admin
测试项目
projectName.Business.Tests
projectName.Data.Test