2015-06-25 2 views
0

Я реализую слабосвязанную архитектуру. MVC в качестве уровня представления (ProjectName.Web) и всей бизнес-логики будет обрабатываться в отдельном проекте Project Project.NAME.Как я могу использовать модель в BL для контроллера MVC

Я буду использовать веб-сервис из своего BL-слоя (ProjectName.BL). Таким образом, объекты класса requestparameter будут видны BL, так как я делаю servicereference.

1) Проблема, с которой я столкнулся, - это как я отправлю свой параметр запроса с контроллера на уровень BL. 2) Следующая проблема заключается в том, как отобразить объекты ViewModel в BL, как только я получу ответ от службы, так как модели просмотра находятся в моих веб-проектах.

Запросите вашу помощь. У меня нет подсказки для достижения этой цели.

ответ

0

Это похоже на любой другой вопрос о расслоении и разделении проблем.

Использование DTO. В своем бизнес-слое введите типы для выполнения действия, которое вы хотите выполнить, и выполните сопоставление между типами.

Ваш вопрос не вполне конкретны, так что я пойду с Foo:

Service Layer:

public class ServiceFooRequest 
{ 
    public int ID { get; set; } 
} 

public class ServiceFooResponse 
{ 
    public string Bar { get; set; } 
} 

public ServiceFooResponse GetFoo(ServiceFooRequest request) 
{ 
    return new ServiceFooResponse 
    { 
     Bar = "Baz" 
    }; 
} 

Бизнес слой:

public class BLFooResponse 
{ 
    public string Bar { get; set; } 
} 

public class BLL 
{ 
    public BLFooResponse GetFoo(int id) 
    { 
     var serviceResponse = _serviceReferenceClient.GetFoo(new ServiceFooRequest 
     { 
      ID = id 
     }); 

     return new BLFooResponse 
     { 
      Bar = serviceResponse.Bar 
     }; 
    } 
} 

MVC:

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); 
} 
+0

Спасибо за ваш ответ, указанное решение решить мою вторую проблему. Как отправить параметры запроса из контроллера в BL как объект, а не как Int id, string 'vin', decimal 12.00. Таким образом, объект будет ссылаться на параметр запроса услуги, чтобы вызвать службу. – user3334074

0

Вам нужно отдельное про ject (DLL). Он будет хранить совместно используемые модели слоев. Каждый контроллер должен иметь ссылку на объект BL или фабрику BLL. Совет. Используйте Automapper для копирования объектов DAO в BDO.

Web проект

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) 
+0

Не могли бы вы сообщить мне пример или ссылку, где вы узнаете четкое изображение. Ограничение в моей текущей архитектуре - я не могу ввести ни одного слоя – user3334074

Смежные вопросы