【发布时间】:2012-11-01 14:21:01
【问题描述】:
我打算使用 ASP.NET MVC 作为 UI 层、WCF 作为业务层和 SQL DB 作为数据库来创建 3 层应用程序。
我的业务层将拆分为服务层 (WCF)、业务层(业务逻辑、业务模型)、数据层(实体框架 - 数据库优先)。
数据层将使用实体框架的实体实现存储库方法,例如 Get、GetById、Update、Insert。
业务层由业务规则及其模型组成。 (这是在 POCO 中)。
服务层只是将业务功能公开为可能的服务方法。
MVC 中的“M”只是表示模型 - 由控制器用来将其转换为 JSON/XML 并将其提供给视图或直接由视图使用。
虽然上面提到的方法很常见,但如果这是一个好的设计,我仍然希望得到确认?
我真正的问题是关于层之间的数据传输(UI(MVC)-服务(WCF)-业务-数据层)
假设我启动了一个 GET 操作以从数据库中检索帐户及其特征。在数据库中,它表示为两个不同的表。
- 帐户 --> 帐户编号、名称、类型
- AccountTraits --> Id、AccountNumber、Category 等。
在 Datalayer 中,我想编写一个方法来获取给定的这两个表记录
AccountNumber 使用 EF。
我的业务模型有两个类,称为 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 代理对象中获取数据并“复制到它的 Presentation Model”(这又应该有自己的 Accounts 和 AccountTraits - 可能带有一些额外的字段)?
如果您能对这些主题有所启发,那就太好了。
谢谢!
【问题讨论】:
-
这对于新应用程序来说似乎很复杂。
-
这是一个好方法。我也遇到了同样的问题。在我对它的研究中,我发现,我们可以在表示层和 wcf 之间使用 datacontract。看来您在 Datalayer 中提取数据库结果的操作是正确的。
标签: asp.net-mvc entity-framework architecture n-tier-architecture