Шаблон репозитория в многоуровневой архитектуре - PullRequest
2 голосов
/ 01 сентября 2011

Я просмотрел довольно много статей о шаблоне репозитория и у меня возникло несколько вопросов.Я пытаюсь реализовать это в приложении ASP.NET 4.0.Архитектура представляет собой многоуровневую архитектуру с уровнем представления данных, бизнес-уровнем и уровнем данных.Из этой статьи http://www.primaryobjects.com/CMS/Article108.aspx

Я создал MYSQLRepository (DataLayer)

public class MySQLRepository:IOrderRepository
{
    public List<Order> GetOrders()
    {

        List<Order> orders = new List<Order>();
        orders.Add(new Order(1,"A"));
        orders.Add(new Order(2,"B"));

        return orders;
    }
}

Мой бизнес-уровень выглядит следующим образом

public class OrderBL
{
    IOrderRepository orderrep;
    public OrderBL(IOrderRepository repository)
    {
       orderrep = repository;

    }

    public List<Order> GetOrders()
    {
        return orderrep.GetOrders();

    }
}

Теперь мой вопрос заключается в том, что на уровне представления я должен сделать это

protected void Page_Load(object sender, EventArgs e)
{
    OrderBL orderBL = new OrderBL(new MySQLRepository());
    List<Order> orders = orderBL.GetOrders();

    foreach (Order order in orders)
    {
        Response.Write(order.OrderId.ToString() + ". " + order.OrderNo + "<br>");
    }

}

Чтобы сделать это, мне нужно сослаться на мой DataLayer на уровне представления.Разве это не так?В идеале я бы хотел сослаться только на свой бизнес уровень.Это что-то не так в моей реализации или это не то место, где можно реализовать шаблон.Я видел много примеров использования ASP.NET MVC, и он, кажется, хорошо работает там.

Кроме того, действительно ли мне нужно внедрение зависимостей здесь?

Спасибо за помощь Soni

Ответы [ 4 ]

7 голосов
/ 01 сентября 2011

Лучше унифицировать IoC, чтобы получить инъекцию конструктора, это удалит ненужные ссылки на слои.

1 голос
/ 01 сентября 2011

Другая альтернатива - вы не передаете ссылки на репозиторий.

Ваш BL может создать экземпляр DL, когда это необходимо.Если у вас есть перекрестные вызовы методов, когда в данных должно выполняться несколько операций, используйте слой фасада, чтобы расположиться поверх ваших бизнес-объектов.В любом случае вам не нужна прямая ссылка на хранилище уровня данных из уровня представления.Если это заставляет вас чувствовать себя еще лучше, вытяните любой из ваших классов Model (например, Order) в отдельный проект "Models".

1 голос
/ 01 сентября 2011

Я думаю, что вы упускаете суть и причину, почему шаблон хранилища является настолько мощным.Может показаться странным называть его на уровне презентации, но представьте, что странице необходимо использовать другой источник данных.Вы можете также легко обменять это с вызовом как: orderBL orderBL = new OrderBL(new OracleRepository());

0 голосов
/ 01 сентября 2011

Чтобы избежать прямого вызова уровня данных, вы можете вызвать функцию на своем бизнес-уровне, чтобы создать свой репозиторий. Ваш бизнес-уровень может позаботиться об остальном.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...