Путаница между «хранилищем» и «уровнем бизнеса» - PullRequest
0 голосов
/ 06 мая 2018

Это фиктивный проект, и в основном я хочу сосредоточиться на «многоуровневой архитектуре». Я следовал этой архитектуре откуда-то еще. Здесь я хочу взять «Пост» из базы данных. так что это мой репозиторий:

public class PostRepo
{
    private DataAccessLayer.DBPost _DbPostInstance = null;
    public List<ModelLayer.PostModel> ListOfPosts = null;
    public PostRepo()
    {
        _DbPostInstance = new DBPost();
    }
    public List<ModelLayer.PostModel> GetListOfPost()
    {
        DataTable dtPost = _DbPostInstance.GetPostDataTable();
        foreach (DataRow dr in dtPost.Rows)
        {
            ModelLayer.PostModel postModel = new PostModel();
            postModel.id = (int)dr[0];
            postModel.postTitle = (string)dr[1];
            postModel.postBody = (string)dr[2];

            ListOfPosts.Add(postModel);
        }

        return ListOfPosts;
    }
}

и вот мой слой Buisness:

class PostBiz
{
    private RepositoryLayer.PostRepo _postRepo;

    public PostBiz()
    {
        _postRepo = new RepositoryLayer.PostRepo();
    }

    public List<ModelLayer.PostModel> GetListOfPost()
    {
        return _postRepo.GetListOfPost();
    }
}

Теперь мой вопрос:

  1. Я делаю совершенно неправильно?
  2. Если моя процедура в порядке, тогда зачем я это делаю? Какова основная цель и роль «бизнес-уровня» здесь и какие преимущества я получу, создав такой бизнес-уровень?

1 Ответ

0 голосов
/ 06 мая 2018

Я не уверен, что является лучшей практикой на других языках, но в PHP я использую множество Action Domain Responder Modeling в качестве архитектуры. Таким образом, база данных на 100% удалена от моего контроллера и логики просмотра. Это выглядит как ты описал.

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

В контроллере, где рендерить html, я сосредотачиваюсь только на запросе и ответе. Остальное отвлечено прочь. В сценарии CLI я снова фокусируюсь на вводе и выводе и вызываю ту же бизнес-логику. В API я снова фокусируюсь на вводе и выводе и вызываю ту же бизнес-логику.

Таким образом, всякий раз, когда бизнес-логика должна измениться, покрываются все 3 конечные точки (html, api и cli).

...