Re[4]: Расширения для бизнес-сущностей
От: Poudy Россия  
Дата: 28.10.05 09:12
Оценка:
Здравствуйте, 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>Описал выше, интерфейсную реализацию смотри ниже.

Всё остальное по интерфейсу поддерживаю.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.