【发布时间】:2015-08-28 02:13:21
【问题描述】:
我已阅读 this 并对此感到疑惑。
我的应用程序包含 4 层
- Web 项目/用户界面
- BLL
- DAL(包含 EF)
- 实体层
到目前为止,我已将 VM 放置在 UI 层中,它是不同类的组合。像这样的
public class CompanyVMIndex
{
public CompanyVM Company { get; set; }
public BillingAddressVM BillingAddress { get; set; }
public List<ShippingAddressVM> ShippingAddress { get; set; }
public List<CompanyContactVM> CompanyContact { get; set; }
}
我现在很困惑如何将这些数据从 UI 发送到 BLL,然后再发送到 DAL。我已经阅读了 automapper 但它是否处理这种情况,如果是,那么如何处理? 截至目前,我决定将虚拟机移动到实体层,实体层将连接到所有三层,以便我可以在同一层发送和接收数据, 还有什么好主意吗?
这就是我将数据从 UI 传递到 BLL 的方式
public ActionResult Create(CompanyVMIndex companyVM)
{
if (ModelState.IsValid)
{
//Calling BLL here
BLLFunction(companyVM)
}
return View("Index");
}
然后在 BLL 中,在 DAL 中使用 Automapper 进行类似的操作
public int BLLfunction(CompanyVMIndex CompanyVM)
{
}
现在,我如何传递数据,因为 BLL 没有 CompanyVMIndex 的定义,它是一个 VM 和 Web UI
【问题讨论】:
-
为视图模型创建一个单独的类库。那将是对您的架构的补充。也将有助于保持所有层特定于他们的工作。
-
把它放在实体层怎么样?
-
嗯,你可以。但这会将两种不同的东西混合到一层中。如果您将图层分开,您可以根据需要提供对其他图层的引用。
-
这会将两种不同的东西混合到一层中??我不太清楚。实际上,我已经为这种情况创建了实体层;当我想从 UI、BLL 和 DAL 访问某些东西时,它们都可以有实体层的引用,这样我就可以防止直接从 UI 访问 DAL,UI 必须通过 BLL 或实体层。
-
见下面约翰的回答。这是一个很好的方法,与我所说的类似。
标签: c# asp.net-mvc entity-framework viewmodel n-tier-architecture