БД и бизнес-объекты.
От: Сергей Туленцев Россия http://software.tulentsev.com
Дата: 30.06.05 12:50
Оценка:
Здравствуйте, уважаемые архитекторы.

"Озадачили" меня тут написанием очередной складской программы. Енто будет не велосипед, потому как помимо своего standalone-назначения (складская программа), в нее будет вынесено хранение данных существующего программного пакета.

Структура таблиц пока что не представляет из себя ничего экстраординарного. Есть "вещь", хранимая на складе, у нее есть, например, такие параметры, как поставщик и тип (foreign keys).

Проблема в том, сохранять ли такую же структуру на стороне клиента? Поясню:
Код, например, может быть таким:
public class SkladItem
{
        public Double Quantity;
        public Supplier Supplier;
}

При таком подходе у каждого айтема будет собственная копия поставщика. А это не есть хорошо, учитывая то возможность редактирования как списка поставщиков, так и параметров каждого в отдельности (встает проблема с синхронизацией).

Можно прочитать всех поставщиков в отдельный список. (То же самое придется проделать для списка типов, прочих справочников, да и много для чего). Завести некую сущность-менеджер, которая будет отдавать экземпляры объектов по их ID. Например, так:
public class SkladManager
{
        Object GetItem(String objectKind, Int32 itemID)
        {
                if (objectKind == "Supplier")
                {
                        return FindInList(_suppliersList, itemID);
                }
                else if(...
        }
}


Код же бизнес объекта преобразуется так:
public class SkladItem
{
        SkladItem(SkladManager manager);
        public     Double         Quantity;
        private Int32            _supplierID;
        public     Supplier     Supplier
        {
            get{return (Supplier)manager.GetItem("Supplier", _supplierID);}
            set{_supplierID = value.ID;}
        }
}


В качестве развития второго варианта можно предложить отложенную загрузку данных в менеджере. Однако же, не факт, что это лучше (насколько я уяснил по прочтению какого-то топика).

Хотелось бы ценных дополнений, рациональных предложений, ну или на худой конец, справедливой критики.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
--
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.