我计划使用 ASP.NET MVC 作为 UI 层、WCF 作为业务层和 SQL DB 作为数据库来创建 3 层应用程序。
我的业务层将拆分为服务层 (WCF)、业务层(业务逻辑、业务模型)、数据层(实体框架 - 数据库优先)。
数据层将使用实体框架的实体实现存储库方法,如 Get、GetById、Update、Insert。
业务层由业务规则及其模型组成。(这是在 POCO 中)。
服务层只是将业务功能公开为可能的服务方法。
MVC 中的“M”只是表示模型 - 控制器使用它来将其转换为 JSON / XML 并将其提供给 View 或直接由 View 使用。
虽然上面提到的方法很常见,但如果这是一个好的设计,我仍然想确认它?
我真正的问题是关于层之间的数据传输(UI(MVC)-服务(WCF)-业务-数据层)
假设我启动了一个 GET 操作以从数据库中检索 Account 及其 Traits。在数据库中,它表示为两个不同的表。
- 帐户 --> 帐号、名称、类型
- AccountTraits --> Id、AccountNumber、Category 等。
在 Datalayer 中,我想编写一个方法来
使用 EF 获取给定 AccountNumber 的这两个表记录。
我的业务模型有两个类,称为 Account 和 AccountTraits。AccountTraits 的对象集合被聚合到 Account 类中。
喜欢,
public class Account
{
string AccountNumber;
List<AccountTraits> Traits;
}
现在,如果我想用其数据填充这些域对象,我可以在我的数据层中使用如下所示的 EF 查询。
public IEnumerable<Account> GetAccountAndItsTraits(string AccountNumber)
{
var query = from a in db.Accounts
select new Accounts() {
AccountName = a.AccountName,
Traits = from t in a.AccountTraits
....
return query;
}
这是从数据层 (EF) 填充业务模型 POCO 的常规方法吗?
现在,在应用了一些业务逻辑之后,我想将这些集合返回到 UI。如何将这些转移到服务层以及如何将其提供给 UI 模型?
我是否必须在 WCF 中使用确切的类定义将 DataContract 定义为业务模型,然后将数据“复制”到它并将其提供给 UI?那么 UI 应该从 WCF 代理对象获取数据并“复制到它的表示模型”(它应该有自己的 Accounts 和 AccountTraits - 可能带有一些额外的字段)?
如果您能对这些主题有所了解,那就太好了。
谢谢!