tom*_*tom 5 c# architecture design-patterns class n-tier-architecture
我在C#中构建标准的三层应用程序
1前端控制台应用程序/但我可能会将其更改为ASP.NET MVC网页
2业务逻辑层
3使用连接到SQL数据库的实体框架的数据层/但这可能会更改为Windows azure
主要目的是显示一些客户数据.
存储在数据库中的客户具有以下字段 -
CustomerID
Firstname
Lastname
DateOfBirth
Othervalue1
Othervalue2
Othervalue3
Creationdate
Updatedate
IsDisabled //this represents "deleted" customers i.e. the app will never use deleted customers, but I want to keep them in the database anyway
Run Code Online (Sandbox Code Playgroud)
在中间层,我只想要
CustomerID
Firstname
Lastname
DateOfBirth
Othervalue1
Othervalue2
Othervalue3
Updatedate
Run Code Online (Sandbox Code Playgroud)
在第一个应用程序的前端我只会显示
CustomerID
Firstname
Lastname
DateOfBirth
Run Code Online (Sandbox Code Playgroud)
从如何从数据层加载客户(可能会更改)并在中间层然后在表示层(可能会更改)中使用该客户的角度,如何正确实施n层应用?
我在哪里放置客户模型?我需要多个吗?我在某处需要ICustomer接口吗?
项目详情 该项目将由两个团队开发,一个位于美国,另一个位于东欧,将有四到五个团队成员.
这个项目不会使用遗留数据访问层.相反,我们将使用Entity Framework构建一个新的; 我们需要设计和构建一个将在所有新应用程序中使用的数据层(对于这个应用程序,我们只需要客户表和一个或两个表).其他项目将向该层添加其他表.
我正在使用DI来注入ICustomerRepository(请参阅此SO问题).但是会实现存储库和工作单元模式.
我关心的是适当地分离各层.我们将在未来几个月内添加许多新项目,新数据层将快速增长.我们还考虑在某个时候迁移到Azure,因此我希望能够在不必重写业务和前端层的情况下交换实体框架数据层.
您有数据模型(数据库模式),域模型和视图模型.
如果您的目标是分离图层,那么您应该在这三个图层中的每个图层中都有代表Customer的不同类(但请参阅评论中的文章@Joe提及).
您的数据访问技术将推动数据模型到域模型的映射.如果使用实体框架,它提供了在这两个模型之间进行映射的功能.
要将域模型映射到视图模型,请查看Automapper以在域对象(例如业务对象)和视图模型之间进行映射.
UPDATE
根据您的新信息,我将分享我的所作所为.这肯定不是唯一有效的方法.
鉴于分布式团队,明确的责任范围很重要.在不同时区,具有不同团队领导的不同人员将致力于代码.
鉴于在遗留数据库上构建新软件,您必须了解三个事实:
我会做以下事情
再次,根据我的背景,经验和偏好,我就是这样做的.这不是唯一有效的方法.