Здравствуйте, уважаемые архитекторы.
"Озадачили" меня тут написанием очередной складской программы. Енто будет не велосипед, потому как помимо своего 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>>