Основная идея многоуровневой архитектуры заключается в том, что n-й уровень должен взаимодействовать с n + 1-м уровнем, но никогда не пересекать промежуточный уровень, поэтому n-й уровень не может прыгать и напрямую взаимодействовать с n + 2-м уровнем.
это был принцип архитектуры, теперь перейдем к вашему делу.
1- Во-первых, вы говорите о 3-уровневой архитектуре, это не 3-уровневая архитектура, потому что вы не размещаете свой DAL ИЛИ BL на отдельном сервере, но вы создаете отдельные слои в своем решении (путем создания отдельного проекта)
2- Так как у вас есть три DLLS (FL, BL, DAL), теперь ваше наслоение должно быть FL -> BL ----> DAL, где ---> обозначает, с кем разговаривали.
Как вы достигнете выше пути (FL -> BL ----> DAL) в вашем приложении?
Для этого вы можете добавить ссылку на DAL в проекте BL и ссылку BL на ваш проект FL, чтобы вы могли придерживаться архитектурного принципа, изложенного выше.
Как реализовать MVC в вашем случае?
1- 'C' обозначает Controller в MVC, Controller - это класс, который отвечает за обновление FL и вашей модели. Поэтому вам необходимо создать отдельный уникальный контроллер для отдельных уникальных функций в вашем приложении (обратите внимание, вам не нужно создавать контроллер для каждой формы в приложении), поэтому если у вас есть модуль заказа, чем создать OrderBaseController и передать этот контроллер как ссылка на ваши взгляды (Winform)
2- Контроллер, созданный на шаге 1, может предоставлять модель (помните, у нас есть ссылка BL в нашем FL), которая может использоваться OrderView.
3 - Представление может изменить модель через контроллер (примечание, что модель в BL, но у нас есть ссылка в нашем FL), но фактические изменения базы данных все еще не зафиксированы.
Как вы будете выполнять шаг 3 выше?
interface IOrderController
{
bool SaveOrder(order order);
bool ValidateOrder(order order);
order GetOrder();
}
public class OrderBaseController : IOrderController
{
private OrderServiceFacade Orderhelper { get; set; }
public OrderBaseController()
{
Orderhelper = new OrderServiceFacade();
}
public bool ValidateOrder(order objOrder)
{
}
#region IOrderController Members
public bool SaveOrder(order order)
{
bool success = false;
if (ValidateOrder(order))
{
success = Orderhelper.SaveOrder(order);
}
return success;
}
#endregion
#region IOrderController Members
public order GetOrder()
{
throw new NotImplementedException();
}
#endregion
}
мы только что внедрили ordercontroller. Теперь пришло время присоединить этот контроллер к представлению.
public partial class Form1 : Form
{
IOrderController Controller;
public order OrderToBeSaved { get; set; }
public Form1()
{
InitializeComponent();
Controller = new OrderBaseController(); // you have the controller ,
// controller creation can also be delegated to some other component but that's totally different issue.
OrderToBeSaved = Controller.GetOrder(); // You got the order object here , once you get the order object you can bind its properties to the different control.
}
}
вы получили полностью загруженный объект заказа, вы можете использовать его свойства, чтобы связать различные элементы управления в форме.
теперь пришло время сохранить заказ
private void btnSave_Click(object sender, EventArgs e)
{
Controller.SaveOrder(OrderToBeSaved);
}
здесь мы удалили логику сохранения в контроллер, теперь давайте посмотрим, как сохранить данные из контроллера. Для Контроллера сохраните заказ, он должен пройти через цепочку, то есть он должен иметь некоторую логику для разговора с BL (Контроллер находится в FL)
Поскольку у нас есть ссылка на BL в нашем FL, мы можем напрямую общаться с BL, но мы проходим еще одну концепцию проектирования, которую мы называем ServiceFacade, класс ServiceFacade, который будет использоваться для делегирования задачи от одного уровня к другому. слой. * * одна тысяча сорок-два
class OrderServiceFacade
{
public bool SaveOrder(order order)
{
return OrderDAO.SaveOrder(order);
}
}
Наконец, нам нужно сохранить заказ в базе данных, поэтому нам нужно определить класс в нашем DAL, мы называем его OrderDAO.
static class OrderDAO
{
static public bool SaveOrder(order order)
{
// put logic to access database and save the data.
}
static DataTable GetOrder(int OrderID);
}
он не завершен, но дает представление о том, как MVC работает в многоуровневом сценарии.