我如何在BL中使用模型到控制器MVC

时间:2015-06-25 10:25:32

标签: asp.net-mvc

我正在实现松耦合架构。 MVC作为表示层(ProjectName.Web),所有业务逻辑将在单独的C#项目ProjectName.BL中处理。

我将从我的BL层(ProjectName.BL)中使用web服务。所以请求参数类对象对于BL是可见的,因为我正在进行服务引用。

1)我面临的问题是如何将我的请求参数从Controller发送到BL层。 2)下一个问题是,一旦我从服务获得响应,将如何映射BL中的ViewModel对象,因为视图模型在我的Web项目中。

请求您的帮助我不知道如何实现这一目标。

2 个答案:

答案 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)