我正在实现松耦合架构。 MVC作为表示层(ProjectName.Web),所有业务逻辑将在单独的C#项目ProjectName.BL中处理。
我将从我的BL层(ProjectName.BL)中使用web服务。所以请求参数类对象对于BL是可见的,因为我正在进行服务引用。
1)我面临的问题是如何将我的请求参数从Controller发送到BL层。 2)下一个问题是,一旦我从服务获得响应,将如何映射BL中的ViewModel对象,因为视图模型在我的Web项目中。
请求您的帮助我不知道如何实现这一目标。
答案 0 :(得分:0)
这就像关于分层和关注分离的任何其他问题一样。
使用DTO。在业务层中,引入用于执行要执行的操作的类型,并在类型之间执行映射。
你的问题不是很具体,所以我会选择Foo:
服务层:
public class FooViewModel
{
public string Bar { get; set; }
}
public ActionResult GetFoo(int id)
{
var businessFooResponse = _bll.GetFoo(id);
var fooViewModel = new FooViewModel
{
Bar = businessFooResponse.Bar
};
return View(fooViewModel);
}
业务层:
RegistryKey Key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\ExistingKey\NewKey");
Key.SetValue("CurrentSlipNumber", CurrentSlipNumber, RegistryValueKind.DWord);
MVC:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ValidateUserResponse xmlns="http://tempuri.org/">
<ValidateUserResult>{"Items":{"Success":"1","UserId":"3","msg":"Success"}}</ValidateUserResult>
</ValidateUserResponse>
</soap:Body>
</soap:Envelope>
答案 1 :(得分:0)
您需要单独的项目(DLL)模型。它将存储层模型之间的共享。 每个控制器都应该引用BL对象或BLL工厂。 提示 - 使用Automapper将DAO对象复制到BDO。
网络项目
public class FoodController : BaseController
{
private IFoodBll _foodBll = null;
public FoodController(IFoodBll foodBll)
{
// Make DI of your BLL
_foodBll = foodBll;
}
[HttpPost]
public ActionResult Edit(FoodEditModel model)
{
_foodBll.Save(model);
}
您的Edit.cshtml看起来应该像这样
@model MyProjects.Web.Models.Foods.FoodEditModel
@Html.HiddenFor(x => Model.Id)
@Html.EditorFor(x => Model.Name)