<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-8864435396524375431.post3925136110560869041..comments</id><updated>2009-12-01T12:12:24.430+02:00</updated><title type='text'>Comments on Систематизация автоматизации: CQS – конец монополии систем реляционных баз данны...</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://igor.quatrocode.com/feeds/3925136110560869041/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html'/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-1999508786152770127</id><published>2009-12-01T12:12:24.430+02:00</published><updated>2009-12-01T12:12:24.430+02:00</updated><title type='text'>Вот еще встретилось и может быть полезно http://my...</title><content type='html'>Вот еще встретилось и может быть полезно http://myshop.codeplex.com/&lt;br /&gt;&lt;br /&gt;Семпл по мотивам CQS</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/1999508786152770127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/1999508786152770127'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1259662344430#c1999508786152770127' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-4190939258753667507</id><published>2009-11-20T01:04:21.928+02:00</published><updated>2009-11-20T01:04:21.928+02:00</updated><title type='text'>К какому именно случаю вы попытались все это приме...</title><content type='html'>К какому именно случаю вы попытались все это применить? Возможно, проблема была именно в не совсем подходящем примере.&lt;br /&gt;&lt;br /&gt;Еще, возможно вы найдете ответы на некоторые вопросы &lt;a href="http://elegantcode.com/2009/11/19/recording-of-my-e-van-presentation-about-cqrs/" rel="nofollow"&gt;здесь&lt;/a&gt;. Ну и пройдитесь еще раз по указанным ссылкам.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/4190939258753667507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/4190939258753667507'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1258671861928#c4190939258753667507' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-4710354881689671470</id><published>2009-11-17T14:40:08.676+02:00</published><updated>2009-11-17T14:40:08.676+02:00</updated><title type='text'>Пораскинув мозгами, и попробовав наструячить пару ...</title><content type='html'>Пораскинув мозгами, и попробовав наструячить пару тестовых примеров по вашему предложению, мне стало уже 100% понятно, что кроме геморроя предложенный вами(или не вами) способ, больше ничего не приносит.&lt;br /&gt;То есть если мы даже хоть какой, то мнимый плюс при работе с моделью. То этот плюс превращается в огромный минус, когда дело касается реализации данных методов.&lt;br /&gt;И в целом мне непонятна ситуация, зачем такой огород городить. Например, выделение OLAP служит для увеличения скорости построения отчетов, и основной костыль с которым все мирятся – что OLAP база может содержать устаревшую информацию.&lt;br /&gt;Но в вашем случае вы делает 2 базы и еще Notify между ними, что бы их держать в одинаковом состоянии, но зачем это надо, когда можно используя  инструменты базы данных, такие как View и StoreProc реализовать точно такую, же систему, то есть у вас структура базы одна, но для приложения она совершенно другая.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/4710354881689671470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/4710354881689671470'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1258461608676#c4710354881689671470' title=''/><author><name>C...R...a...S...H</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-2364910065438484879</id><published>2009-11-12T16:43:15.550+02:00</published><updated>2009-11-12T16:43:15.550+02:00</updated><title type='text'>например, так. хотя, все зависит от случая.

class...</title><content type='html'>например, так. хотя, все зависит от случая.&lt;br /&gt;&lt;br /&gt;class QuarterDiscount : Entity&lt;br /&gt;{&lt;br /&gt;    Percentage Percentage { get; set; }&lt;br /&gt;&lt;br /&gt;    public UpdatePercentage(Percentage newValue)&lt;br /&gt;    {&lt;br /&gt;        Percentage = newValue;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Amount Apply(Amount amount)&lt;br /&gt;    {&lt;br /&gt;        return amount * percentage;&lt;br /&gt;    }&lt;br /&gt;}</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/2364910065438484879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/2364910065438484879'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1258036995550#c2364910065438484879' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-3556539585807330931</id><published>2009-11-12T16:35:58.045+02:00</published><updated>2009-11-12T16:35:58.045+02:00</updated><title type='text'>Игорь, можете поподробнее описать QuarterDiscount....</title><content type='html'>Игорь, можете поподробнее описать QuarterDiscount.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/3556539585807330931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/3556539585807330931'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1258036558045#c3556539585807330931' title=''/><author><name>C...R...a...S...H</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-2349692227994893849</id><published>2009-11-12T13:34:17.198+02:00</published><updated>2009-11-12T13:34:17.198+02:00</updated><title type='text'>To C...R...a...S...H

Тут следует отличать действи...</title><content type='html'>To C...R...a...S...H&lt;br /&gt;&lt;br /&gt;Тут следует отличать действительно отчетные данные, которые никак не влияют на логику домена, и данные, которые домену нужны.&lt;br /&gt;&lt;br /&gt;Исходя из этого, скажем, в модели бы появилась сущность типа какой-нибудь QuarterDiscount и любой новый заказ бы влиял на ее состояние. И даже больше - изменения ее состояния регистрировались в каких-нибудь отчетах :)&lt;br /&gt;&lt;br /&gt;А вообще, вы затронули интересную тему, о которой я умышлено не написал.&lt;br /&gt;&lt;br /&gt;Вся эта система работает хорошо, когда она, скажем так, не развивается. Когда вы запускаете механизм, все данные куда-то ходят, все где-то аккумулируется и таким образом поддерживается актуальное состояние системы.&lt;br /&gt;&lt;br /&gt;А как быть, если, скажем на любом из уровней, добавляются новые типы &amp;quot;аккумуляторов&amp;quot;, которые должны работать так, как если бы они были в системе последние лет 10...&lt;br /&gt;&lt;br /&gt;Вот тут есть о чем поговорить :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/2349692227994893849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/2349692227994893849'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1258025657198#c2349692227994893849' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-3455383340531090470</id><published>2009-11-12T13:23:17.327+02:00</published><updated>2009-11-12T13:23:17.327+02:00</updated><title type='text'>2Meowth:

А никто и не говорит об абсолютной новиз...</title><content type='html'>2Meowth:&lt;br /&gt;&lt;br /&gt;А никто и не говорит об абсолютной новизне подхода. Тут все дело лишь в точке приложения этого подхода: если приложение сильно data-centric, то все будет делаться на основе Master/Subscriber. Если же приложение behaviour-centric, то это будет называться CQS.&lt;br /&gt;&lt;br /&gt;Нужно отметить, что схема Master/Subscriber вполне себе может сочетаться и с CQS на уровне кода. Оно все и так сильно оторвано друг от друга. Никаких догм здесь нет - во всем следует быть прагматиком :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/3455383340531090470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/3455383340531090470'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1258024997327#c3455383340531090470' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-4614982456181130232</id><published>2009-11-12T13:02:02.404+02:00</published><updated>2009-11-12T13:02:02.404+02:00</updated><title type='text'>Игорь, а как ваша архитектура будет обслуживать та...</title><content type='html'>Игорь, а как ваша архитектура будет обслуживать такие требования бизнеса, которые строятся на отчетной информации.&lt;br /&gt;Наприме: Клиент автоматически получает скидку, равную 3% от средней стоимости заказов за последний год(месяц, квартал, эру...).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/4614982456181130232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/4614982456181130232'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1258023722404#c4614982456181130232' title=''/><author><name>C...R...a...S...H</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-1257254541078294190</id><published>2009-11-11T16:39:25.124+02:00</published><updated>2009-11-11T16:39:25.124+02:00</updated><title type='text'>На самом деле, схема репликации Master(RW) - Subsc...</title><content type='html'>На самом деле, схема репликации Master(RW) - Subscriber(RO) (для снижения нагрузки) организует что-то подобное, только там по прагматическим причинам используются RDB и для того звена, что у вас названо ReportingDB.&lt;br /&gt;Подход в данном случае интересный, но спорный.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/1257254541078294190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/1257254541078294190'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1257950365124#c1257254541078294190' title=''/><author><name>Meowth</name><uri>http://www.blogger.com/profile/04318396551435056923</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-7761485123819455776</id><published>2009-11-09T16:44:18.259+02:00</published><updated>2009-11-09T16:44:18.259+02:00</updated><title type='text'>На самом то деле, если уже бояться проблемы эквива...</title><content type='html'>На самом то деле, если уже бояться проблемы эквивалентности/актуальности данных, то надо отключить кеши всех уровней, сделать запрос на получение данных с подтверждением. Фактически базаданных репортов может расматриваться как кеш. Кеш с возможностью принудительной актуализацией данных. Собсно я так понимаю именно для этого и рождаються паттерны на подобие Event Sourcing.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/7761485123819455776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/7761485123819455776'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1257777858259#c7761485123819455776' title=''/><author><name>Mike Chaliy</name><uri>http://chaliy.name/</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-3128078762346539717</id><published>2009-11-09T11:33:43.799+02:00</published><updated>2009-11-09T11:33:43.799+02:00</updated><title type='text'>Я как раз постарался избежать вывода какого-то шаб...</title><content type='html'>Я как раз постарался избежать вывода какого-то шаблонного решения, показав лишь, что RDBMS могут быть не единственным способом хранения данных при таком раскладе в дизайне системы.&lt;br /&gt;&lt;br /&gt;А проблема эквивалентности дублирующихся данных всегда появляется в тот самый момент, когда в табличке Order появляется колонка Total :)&lt;br /&gt;&lt;br /&gt;Если серьезно, то я бы назвал это не проблемой &lt;i&gt;эквивалентности&lt;/i&gt;, а проблемой &lt;i&gt;актуальности&lt;/i&gt; данных.&lt;br /&gt;&lt;br /&gt;И не был бы столь категоричен в неприятии такого разделения. Потому на другой чаше весов с актуальностью данных находится высокая степень доступности системы (та, которая high availability). И применимость того или иного решения зависит исключительно специфики домена и от важности этих показателей для бизнеса.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/3128078762346539717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/3128078762346539717'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1257759223799#c3128078762346539717' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-2683465727154639943</id><published>2009-11-09T10:15:54.567+02:00</published><updated>2009-11-09T10:15:54.567+02:00</updated><title type='text'>Мне совсем не нравится схема с сепарированными "Re...</title><content type='html'>Мне совсем не нравится схема с сепарированными &amp;quot;Reports Data&amp;quot; и &amp;quot;Domain Data&amp;quot;. Почему? Потому что, не существует способа позволяющего получить 100% гарантию еквивалентности данных хранящихся в этих двух хранилищах. А для бизнес приложения нет хуже ошибки, чем несоответствие данных в отчетах реальному положению дел. Такая ошибка сразу и навсегда убивает доверие пользователей к системе. &lt;br /&gt;Да, разделение БД на OLAP и OLTP имеет место, но обычно по причине невозможности решить OLAP задачи на OLTP базе. Но рекомендовать такой подход в качестве шаблонного и всеобщего я бы не стал.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/2683465727154639943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/3925136110560869041/comments/default/2683465727154639943'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2009/11/cqs_09.html?showComment=1257754554567#c2683465727154639943' title=''/><author><name>Sergey Rozovik</name><uri>http://www.blogger.com/profile/13717493609449785600</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2009/11/cqs_09.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-3925136110560869041' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/3925136110560869041' type='text/html'/></entry></feed>