Эй, ребята, я программировал ООП в течение семестра на C ++, и я только начинаю C #. Я до сих пор не до конца понимаю, как отделить слои друг от друга и что делает, что, где. Из того, что я понимаю, есть эти слои:
Хранилище -> Доступ к данным -> Бизнес-логика -> Командный процессор -> Пользовательский интерфейс
Теперь я не могу понять, ТОЧНО, какова ответственность каждого слоя ..
Я понимаю, что доступ к данным содержит только такие методы, как Add, Update, Delete, Query, и что Data Access не заботится о том, что он вставляет, он просто получает объект в качестве параметра и делает с ним что угодно. Создает ли Business Logic объект из данных, отправляемых из командного процессора, где командный процессор получил его из пользовательского интерфейса и выполнил проверку входных данных на нем?
Также, как бы я отправлял и получал разные команды, например, как команда Query будет сильно отличаться от команды вставки, так как она должна будет отправлять данные обратно …
Как вы, вероятно, можете сказать, я совсем растерялся, и мне было трудно найти хорошие учебники по этому вопросу.
Спасибо!
Редактировать.
Я пытаюсь начать с методов запроса уровня доступа к данным. У меня есть три дочерних объекта, которые я храню в общем списке родительского типа.
У меня есть разные варианты запросов, один из которых тип. Поэтому мне нужно искать в родительском списке и возвращать данные каждого объекта, если указан его тип.
Мой родительский объект имеет перезаписанный ToString (), а также мои дочерние объекты, которые вызывают родительский ToString (), чтобы получить все данные объекта в одну строку. Я здесь занимаюсь бизнес-логикой? Также, когда я получаю список объектов, которые соответствуют моему типу, и пытаюсь выполнить итерацию, бросил это с помощью foreach, вызывающего ToString (), это только вызвало бы родительский ToString (), я предполагаю?
public string Lookup(Types type)
{
List<Parents> search = new List<Parent>();switch (type)
{
case Types.TypeOne:
{
search = ParentDataBase.FindAll( delegate(Child1 findChild) {
return findChild is ChildOne; } );
}
break;
case Types.TypeTwo:
{
search = ParentDataBase.FindAll( delegate(Parents findChild) {
return findChild is ChildTwo; } );
}
break;
case Types.TypeThree:
{
search = ParentDataBase.FindAll( delegate(Parent findChild) {
return findChild is ChildThree; } );
}
break;
}
string results = "";
foreach (Parent x in search)
{
results += t.ToString();
}
return results;
}
Стрелки, представленные в вопросе, сбивают с толку, поэтому во время обсуждения я их поменяю.
ТАК только позвольте мне поставить две ссылки, поэтому попробуйте поискать CRUD а также MVC Архитектура, когда они упоминаются.
Давайте сделаем один шаг за раз:
Хранение -> DataAccess
Это обычно обрабатывается ORM. ORM будет обрабатывать доступ к базе данных.
Созданные вами ORM плюс пользовательские (модельные) объекты позволяют рассеянный доступ к данным. Это будет выглядеть примерно так:
ORM переводит данные в базу данных и из нее, чтобы сделать ее пригодной для использования. ОРМ может справиться с CRUD операции для вас, чтобы запросы, обновления и вставки не присутствовали в других частях вашего кода.
Бизнес Логика
Бизнес-логика работает с данными, получая доступ, изменяя и сохраняя их.
Бизнес-логика может получить доступ к вашим моделям для обеспечения доступа и сохранения данных.
Модифицирующая часть реализована в бизнес-логике.
Бизнес-логика может быть маленькой, большой или комбинацией других бизнес-элементов.
Наш график теперь выглядит так:
База данных <- ORM -> Модели <- Бизнес Логика
Командный процессор
Командный процессор выполняет части бизнес-логики и соединяет части всей системы вместе и иногда называется контроллером в MVC
База данных <- ORM -> Модели <- Бизнес Логика <- Командный процессор
Пользовательский интерфейс
Пользовательский интерфейс (UI) можно разбить на две части: представление данных и ввод данных пользователем.
Представление данных называется представлениями в MCV и отвечает за сбор данных и их чтение пользователем.
Пользовательский ввод запускает части командного процессора.
В общем и целом:
,-> View
Database <- ORM -> Models <- Business Logic <- Command Processor
`<- User Input
Других решений пока нет …