Мне интересно, что лучше всего вставить в мое приложение вставки для настройки. В принципе, мое приложение разделено на две сборки: A Core
сборка, содержащая всю бизнес-логику и сборку UserInterface
, содержащую графический интерфейс, классы контроллера (я использую отклоняющий шаблон MVC callse «Пассивный просмотр») и некоторые вспомогательные классы. Ядро сборки также используется некоторыми другими приложениями.Лучший способ реализовать перетаскивание настроек в моем дизайне
Мое применение используется нашей компанией для обработки заказов других компаний. Общий процесс для всех компаний одинаковый, но здесь и там существуют небольшие отклонения, характерные для клиента. На данный момент эти отклонения внедряются прямо в сборку ядра, которая пахнет. Я хочу отделить эти особенности, наилучшим образом проинтегрировать их в один объект на одного клиента, поэтому у меня есть центральный объект, содержащий все детали, специфичные для клиента, которые я могу внести в сборку UserInterface.
Я думал об использовании событий для достижения этого. Добавив некоторые события в мои основные классы, мои классы контроллеров смогут подбирать или отменять подписку, применяя эти отклонения для определенных клиентов.
Я могу думать о двух способах этого: добавление этих привязок вручную или их добавление автоматически, если существуют девиантные методы. Я думаю о чем-то вроде этого для последнего:
foreach (Order order in form.SelectedOrders) {
CustomerExtension customer = customerExtensions[order.Customer];
if(Exists(customer.StatusChanging(...)) // Pseudo Code!
OrderManager.StatusChanging += new StatusChangingEventHandler(customer.StatusChanging(...));
order.SetStatus(newStatus);
if(Exists(customer.StatusChanging(...)) // Pseudo Code!
OrderManager.StatusChanging -= new StatusChangingEventHandler(customer.StatusChanging(...));
}
Я предполагаю, что я должен использовать Reflection для достижения этой цели, но это жизнеспособное для операций, которые должны быть сделаны во много раз?
Или есть ли лучшие способы добавить крючки настройки, в то же время лишая меня централизации отклонений на основе клиентов?
[EDIT] Полностью пересмотренный вопрос.
Эй, Фабрицио! Прежде всего, спасибо за продуманный пример, я очень ценю это. Как вы думаете, каковы преимущества вашего подхода к событиям? Я также думал о чем-то подобном, но не любил понятие пустых методов в классе BaseCustomization. Одно из преимуществ, которое я вижу, - это интерфейс для всех настроек. –
Я реализовал ваш подход, и мне это нравится! Это разумно и позволяет избежать некоторых проблем, которые мой подход имел. Большое вам спасибо за ваше время, вы действительно помогли мне! –