Здравствуйте, stasukas, Вы писали:
P>>Хорошо. Рассмотрим следующую ситуацию. У нас есть базовая конфигурация, miniBasis, к которой создаются модули CRM и WMS. Такие модули можно делать в виде plugin. Это будет касаться пользовательского интерфейса. Что насчет дополнительных полей в сущности Customer?
S>Делаем новый класс, являющийся расширением Customer
S>S>public class CRMCustomer : Customer {...}
S>public class WMSCustomer : Customer {...}
S>
S>
Понятно. Вначале мне тоже казалось, что это идеальное решение

.
Всё дело в том, что теперь в справочнике клиентов находится каша из различных наследников.
По идее, CRM модулю расширенная информация нужна для _всех_ клиентов. Так же, как и WMS.
По крайней мере есть ситуации, когда некий экземпляр Customer должен быть расширен до CRMCustomer и WMSCustomer одновременно.
Не, ок. Я понимаю, что WMSCustomer — это может быть не сама сущность, БО. Тогда у нас есть доп. таблицы в базе для расширений, каждый модуль работает с общим справочником так, как будто там только его кастомеры, т.е. БО делает для него прозрачным добавление полей и заполнение их default значениями.
Я спрашивал про сущности. Если посмотреть на эти таблицы расширений, то никакой диаграммы наследования для
сущностей не будет. Будет так:
public class Customer {...}
public class CRMCustomerExt {...}
public class WMSCustomerExt {...}
S>
Типа так. Кстати, наследование реализации для БО тоже плохая идея, т.к. создаст много копий одних и тех же данных. Когда CRM и WMS работают одновременно, мы получим 3 копии: экземпляры Customer, CRMCustomer и WMSCustomer. Т.е. лучше юзать интерфейсы:
public interface ICustomer {...}
public interface ICRMCustomer {...}
public interface IWMSCustomer {...}
public class Customer : ICustomer {...}
public class CRMCustomer : ICRMCustomer
{
private ICustomer customer;
...
}
public class WMSCustomer : IWMSCustomer
{
private ICustomer customer;
...
}
S>
P>>Как добавить CRM возможности, чтобы ими было удобно пользоваться (а не через Advanced->CRM Options)?
S>User Controls (см. далее по тексту*)
P>>Как обеспечить интеграцию модулей, т.е. расширение фич WMS в присутствии модуля CRM?
S>Описал выше, интерфейсную реализацию смотри ниже.
Всё остальное по интерфейсу поддерживаю.