Где разместить * продвинутую * бизнес-логику в проекте ASP.NET MVC / Linq2Sql? - PullRequest
1 голос
/ 12 ноября 2009

Я заканчиваю переписывание инструмента управления проектами с использованием ASP.NET MVC, LINQ2QL и шаблона проектирования Repository. Практически следуя примеру NerdDinner.

У меня есть класс с именем Task, у которого есть дочерний список TaskStages. Для этого примера этапы готовы, находятся в стадии разработки и завершены. Я отслеживаю текущую стадию задачи, но каждый раз, когда изменяется стадия, я хочу записать историческую запись в таблицу стадии задачи.

Я бьюсь над тем, где разместить эту функциональность и поддерживать тестируемость. Это идет в контроллере? Repository? или частичный класс?

Если это проблема дизайна, пожалуйста, дайте мне знать!

Ответы [ 3 ]

2 голосов
/ 13 ноября 2009

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

Вам нужна служба, отвечающая за смену этапа:

public interface IStageChanger {
    void Rename(Task t, string newName);
    // etc
}

Я борюсь за то, где это поставить функциональность и поддерживать проверяемость. Это идет в Контроллер? Repository? или частичный класс

Ни. Уровень обслуживания. У вас может быть другой сервис, отвечающий за написание истории, поэтому итоговая реализация IStageChanger будет выглядеть примерно так:

public class StageChanger : IStageChanger {
    public StageChanger(ITaskHistoryWriter historyWriter) {
        // 
    }

    public void Rename(Task t,string newName) {
        history.Write(t, /*whatever*/)
    }
}

Затем вы используете контейнер DependencyInjection (Windsor или аналогичный), просто запрашиваете службу смены.

2 голосов
/ 12 ноября 2009

Вы можете справиться с этим одним из двух способов.

Лично я бы создал бизнес-объекты, которые находились между Контроллером и Доступом к данным (Repository / LINQ2SQL). Затем вы будете использовать эти объекты в качестве модели и взаимодействовать с данными через них.

Вы также можете поместить логику в контроллер ... но тогда вам придется повторить эту логику по всем направлениям, если есть несколько областей приложения, которые должны работать одинаково.

0 голосов
/ 12 ноября 2009

Я новичок в ASP.NET MVC, но у меня должен быть метод в классе для изменения этапов и логика для отслеживания этих изменений в этом методе (рефакторинг при необходимости) Короче говоря, я не думаю, что это явно принадлежит контроллеру.

...