【发布时间】:2013-01-25 11:03:13
【问题描述】:
我正在用 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
中层,我只想要
CustomerID
Firstname
Lastname
DateOfBirth
Othervalue1
Othervalue2
Othervalue3
Updatedate
我只会在第一个应用程序的前端显示
CustomerID
Firstname
Lastname
DateOfBirth
如何从从数据层加载客户(可能会改变)并在中间层然后在表示层(可能会改变)使用该客户的角度正确实施 n 层应用程序?
我应该把 Customer 模型放在哪里?我需要不止一个吗?我是否需要某个地方的 ICustomer 接口?
项目详情 该项目将由两个团队开发,一个位于美国,另一个位于东欧,团队成员将在 4 到 5 人之间。
此项目不会使用旧数据访问层。相反,我们将使用 Entity Framework 构建一个新的;我们需要设计和构建一个将在所有新应用程序中使用的数据层(对于这个应用程序,我们只需要客户表和一两个表)。其他项目将向该层添加其他表。
我正在使用 DI 来注入 ICustomerRepository(参见 SO question)。但将实现存储库和工作单元模式。
我关心的是适当地分离层。在接下来的几个月中,我们将添加许多新项目,新的数据层将快速增长。我们也在考虑在某个时候迁移到 Azure,因此我希望能够交换实体框架数据层,而无需重写业务层和前端层。
【问题讨论】:
-
我认为这比你想象的更主观。 Mark Seeman 不久前在blog.ploeh.dk/2012/02/09/IsLayeringWorthTheMapping.aspx 上写了一篇很棒的帖子
-
我现在正在阅读他关于 DI 的书和他的一些博客文章。它们发人深省。
标签: c# class design-patterns architecture n-tier-architecture