|
Какие практики создания бизнес-обьктов
|
|||
---|---|---|---|
#18+
Возьмём как пример два простых обьекта (бизнесс-обьекты форума), предположим Thread и Message. Оба обьекта используються как в виде массива, так и в виде отдельного обьекта. Только вот какой паттерн использовать для эффективной выдачи информации (например Flyweight). Тоесть предположим есть две ситуации: в одной выдаёться список Thread и информация о Message не требуеться, в другой нужен один Thread и несколько Message. Вопрос состоит в том, как эффективно построить доступ к базе данных через обьекты, чтобы они могли работать как с одним обьектом, так и с множеством. Пусть предположим есть 2 конструктора, пустой для нового Thread и уже созданный получаеться через Id. Thread(Guid Id);Thread(); Когда нам нужен один Thread, то всё прозрачно, но инициализировать список Thread каждого по отдельности кажеться сомнительной затеей. Что подскажете эксперты??? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2007, 18:17 |
|
Какие практики создания бизнес-обьктов
|
|||
---|---|---|---|
#18+
TJivichВопрос состоит в том, как эффективно построить доступ к базе данных через обьекты, В этом фразе содержится внутреннее противоречие. В данном случае Вам прямая дорога в lazy режим. Thread должен иметь коллекцию Messages, по умолчанию пустую, и загружаемую только тогда, когда кому-то потребуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2007, 18:26 |
|
Какие практики создания бизнес-обьктов
|
|||
---|---|---|---|
#18+
softwarer TJivichВопрос состоит в том, как эффективно построить доступ к базе данных через обьекты, В этом фразе содержится внутреннее противоречие. А в чём противоречие??? Ну про message это ясно, а что делать со списком Thread??? Я так понимаю сценарий: 1. Загрузка из базы списка Threads 2. Через Thread(DataRow dr) загружаеш данные в каждый элемент Подумываю следует иметь кешированный список Thread и из него как то получать данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2007, 18:34 |
|
Какие практики создания бизнес-обьктов
|
|||
---|---|---|---|
#18+
TJivichА в чём противоречие??? В "эффективный доступ к БД через объекты", где под "объектами" понимается некий ORM. Как бы это объяснить.... если Вы смотрели какую-либо литературу по RPC, наверняка видели утверждение, что хорошее приложение, если вдруг взять и заменить некоторые его объекты удаленными, имеет все шансы стать очень неэффективным. Рассматривая БД через ORM, Вы видите по сути "удаленные объекты-строки", к которым создаете локальную оболочку - и результат ровно такой же. Скажем, рассмотрите тот же Thread. В списке сообщений как правило отображаются такие атрибуты, как "количество сообщений в топике", "время последнего сообщения", "автор последнего сообщения". Следовательно, эти атрибуты должны быть доступны. Каким образом? Самый "объектный" вариант - считать список Messages, из которого они все легко получатся. Проблема в том, что тогда для обновления списка тем надо будет перечитать все сообщения форума, что вряд ли приемлимо. Поэтому, скрипя зубами, придется идти на компромисс - завести в Thread-е поле для количества, которое считать sql-ным count(), и кроме того метод наподобие GetLastMessage(), который ищет и считывает последнее сообщение. Это лучше? Намного. Эффективно? Да как сказать.. можно и лучше. Например, таким образом считывается текст сообщения, который может занимать многие килобайты и быть совершенно не нужен. Поэтому, продолжая оптимизацию, придется сделать что-нибудь типа GetLastMessageHeader(). Это уже не очень ложится в "чистую и красивую объектную иерархию", но что самое скверное, все равно значительно уступает по эффективности одному-единственному оптимизированному sql-запросу, который вернет строку типа "та информация, которая нужна в данном месте". Это уже не будет ни "топик", ни "сообщение", это будет непришейкобылехвост, но - самый быстрый. TJivichНу про message это ясно, а что делать со списком Thread??? Это зависит от того, что Вы вообще делаете. Если планируется веб-интерфейс с сервером приложений, список тредов - явный кандидат на постоянное присутствие в памяти. Однако тут возникает вопрос истории (старых-старых тредов, когда кто-то вдруг возьмет и ткнет в двадцатую страницу форума). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2007, 20:48 |
|
Какие практики создания бизнес-обьктов
|
|||
---|---|---|---|
#18+
TJivichВопрос состоит в том, как эффективно построить доступ к базе данных через обьекты доступ к реляционой базе данных нужно организовывать средствами реляционного доступа. К объктной СУБД - через объекты. Можно и к реляционной через объекты, если позволяют источники финансирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2007, 00:32 |
|
|
start [/forum/topic.php?fid=33&msg=34601588&tid=1549052]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
127ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 229ms |
0 / 0 |