Слой поперечной резки | Automapper | Внедрение зависимости
У меня есть многоуровневое приложение MVC, и у меня есть несколько вопросов о сквозном слое. Пока что на этом уровне есть журналы, DI, обработка ошибок и кэш.
Я создал проект и поместил все эти функции в одну папку. Это нормально? Или я должен создать проект для каждой функции?
Поскольку в этом проекте я настроил Autofac (папка DI), мне пришлось добавить ссылки на другие проекты: Model, Repository и Service. Можно ли добавить эти ссылки в проект сквозной резки?
Должен ли я создать отдельный проект для группировки общих функций? Например, перечисления, константы и методы, такие как GetMd5Hash. Или я должен использовать проект Cross Cutting для этого?
Должен ли я считать Automapper сквозной задачей? Пока что я настроил его на уровне Presentation, чтобы конвертировать из Entity в ViewModel и ViewModel в Entity. Из-за этого мне пришлось добавить ссылку на модель, которую я бы хотел избежать.
2 ответа
Обычно у вас есть помощники по межсекторальным проблемам (CCC), которые используются в вашем приложении. Эти помощники могут быть определены в одном или разных проектах. Я лично задаю себе эти 2 вопроса, прежде чем принять решение о гранулярности моих библиотек:
1- Является ли вид связан с B? Могу ли я поместить их в 1 категорию (например, CCC)?
2- Есть ли случаи, когда мне нужно использовать A без B (или наоборот) в другом проекте?
Если ответ на первый вопрос - "Да", а на второй - "нет", поместите их в одну и ту же библиотеку / пакет. И всегда учитывайте возможность повторного использования, когда вы хотите решить, как разместить материал в разных проектах.
Эти помощники не должны иметь ссылок на ваши основные проекты, так как они просто помощники и утилиты и должны быть независимы от бизнес-логики и бизнес-области.
В ваших основных проектах (приложение MVC или библиотеки уровня бизнес-логики) вы будете использовать эти помощники в своем коде. Или же вы будете использовать библиотеки с ориентацией на аспекты (AOP) для внедрения их в ваш код.
Я бы не рассматривал такие вещи, как DI и automapper, как общие проблемы. Ведение журнала, аудит, аутентификация, авторизация и кэширование являются хорошими примерами CCC. Но такие вещи, как DI и Automapper - это то, что вы используете для реализации своих архитектурных шаблонов и дизайна, поэтому они разные. И нет смысла создавать новые библиотеки или помощников, чтобы применять их в своем проекте.
Пожалуйста, да, вы можете сделать это, но какой смысл помещать их в отдельный проект? Вы хотите использовать их в разных проектах? Если это так, создавайте проекты для них.