<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>Форум 'Архитектура программного обеспечения' на RSDN.RU</title>
    <link>http://www.rsdn.ru/Forum/design/</link>
    <description>Форум "Архитектура программного обеспечения" предназначен для обсуждения вопросов, относящихся к стадии проектирования ПО.</description>
    <category>design</category>
    <language>ru-ru</language>
    <copyright>Copyright ©, RSDN.ru, 2001-2007</copyright>
    <webMaster>webmaster@rsdn.ru</webMaster>
    <generator>RSDN RSS Generator 1.3</generator>
    <image>
      <url>http://www.rsdn.ru/rsdn.gif</url>
      <title>RSDN.RU</title>
      <link>http://www.rsdn.ru</link>
    </image>
    <lastBuildDate>Fri, 12 Mar 2010 22:42:29 GMT</lastBuildDate>
    <ttl>5</ttl>
	<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/rsdn/design" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="rsdn/design" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Где хранить Entites?(Те что в Business Layer) Возможно бред!</title>
		<link>http://www.rsdn.ru/Forum/design/3733095.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3733095.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3733095.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3733095</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3733095.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3733095</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Пишется приложение основаное на модуляризации. Т.е широко будут использоваться плагины.&lt;br /&gt;
В принципе вся логика приложения будет разбита и реализовываться в куче библиотек.&lt;br /&gt;
Возник вопрос. Как организовать работу с Entities. Где их объявлять (хранить).&lt;br /&gt;
Есть два варианта:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.&lt;/b&gt; Хранить ВСЕ сущности в какой-нибудь Entities.dll и "цеплять" эту dll к каждой новой разрабатываемой библиотеке New.dll. И тогда New.dll сможет спокойно обращаться к сущностям через Entities.dll&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Недостатки:&lt;/i&gt;&lt;br /&gt;
&lt;ul style='margin-top:0; margin-bottom:0;'&gt;&lt;li /&gt;Entities.dll со временем будет очень "тяжелая". Не очень разумно к каждой New.dll цеплять Entities.dll ради какой-то одной необходимой сущности, которую нужно использовать в New.dll&lt;/ul&gt;
&lt;br /&gt;
&lt;i&gt;Преимущества:&lt;/i&gt;&lt;br /&gt;
&lt;ul style='margin-top:0; margin-bottom:0;'&gt;&lt;li /&gt;Простота использования&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;2.&lt;/b&gt; Объявлять и хранить каждую сущность в той библиотеке, в которой это необходимо по смыслу. Там где идет непосредственно работа с данными этой сущности (заполнение, редактирование). Все другие библиотеки ничего не знают ни друг о друге, ни о том где хранится нужная им сущность. Если какой-то библиотеке нужно получить данные из этой сущности &amp;mdash; она обращается к главному приложению, или просто отправляет сообщение-запрос о том, что нужно получить данные из какой-то неизвестной сущности (через какой-то интерфейс). Далее приложении ищет в каждой библиотеке нужные данные (по указаному интерфейсу), находит их, и в каком-то виде отправляет назад в New.dll.&lt;br /&gt;
Это вообще разумно что здесь описано?&lt;br /&gt;
Это похоже на какой-то паттерн проектирования. Может подскажите, есть ли такой?&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Преимущества:&lt;/i&gt;&lt;br /&gt;
&lt;ul style='margin-top:0; margin-bottom:0;'&gt;&lt;li /&gt;Слабая связность&lt;br /&gt;
&lt;li /&gt;Высокая гибкость&lt;br /&gt;
&lt;li /&gt;Возможность использования сторонних библиотек, которые реализуют известный интерфейс&lt;/ul&gt;
&lt;br /&gt;
&lt;i&gt;Недостатки:&lt;/i&gt;&lt;br /&gt;
&lt;ul style='margin-top:0; margin-bottom:0;'&gt;&lt;li /&gt;Возможно бред?&lt;br /&gt;
&lt;li /&gt;Я не знаю как это реализовать&lt;/ul&gt;
&lt;br /&gt;
У кого какие мысли по этому поводу?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/3Q43qzguc3Q" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Fri, 12 Mar 2010 12:24:56 GMT</pubDate>
		
			<author>AHgpeu &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Интерфейс рисуется отдельно. Логика пишется в библиотеках.</title>
		<link>http://www.rsdn.ru/Forum/design/3732821.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3732821.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3732821.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3732821</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3732821.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3732821</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Интересует схема как это собирается вместе.&lt;br /&gt;
Если интерфейс рисуется отдельно, логика описана в плагинах...&lt;br /&gt;
Из чего в конечном итоге формируется ехе-шник?&lt;br /&gt;
Что вообще в этой архитектуре будет из себя представлять ехе-шник?&lt;br /&gt;
Что из себя будет представлять архитектура?&lt;br /&gt;
Где об этом почитать?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/O9WiIRrSXJU" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Fri, 12 Mar 2010 09:40:44 GMT</pubDate>
		
			<author>AHgpeu &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Метод или методы</title>
		<link>http://www.rsdn.ru/Forum/design/3732689.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3732689.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3732689.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3732689</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3732689.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3732689</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Хорошего настроения и с весной вас.&lt;br /&gt;
&lt;br /&gt;
Голосование &lt;a href="http://www.rsdn.ru/poll/2543.aspx" title="Метод или методы (архитектура, дизайн)?" class=" tips m" rel="#p2543" target="_blank"&gt;здесь&lt;div class="tooltip" id="p2543"&gt;Автор: kvasya&lt;br /&gt;Дата: 12.03 10:57&lt;br /&gt;Вопрос: При всех прочих равных условиях я предпочту...&lt;/div&gt;&lt;/a&gt;.&lt;br /&gt;
Спасибо.&lt;br /&gt;
&lt;br /&gt;
Вопрос возник в результате ленивой беседы с коллегой. &lt;br /&gt;
Я всегда предпочитал SetSomething. Но вот, на данный момент, появились легкие сомнения. Мотивация следующая: методы Enable/Disable &amp;mdash; вроде как требуют меньшей концентрации внимания при чтении клиентского кода. То есть отсутствует необходимость читать/понимать аргумент (enable он или disable). И похоже это огромный плюс. Минус вижу в разбухании классов и в некоторой асимметрии: логичный getSomething рядом с setSomething и не совсем мм... интуитивный IsSomethingEnabled (хотя это уже более надумано).&lt;br /&gt;
&lt;br /&gt;
Вообще &amp;mdash; засомневался, стоит ли предпочесть методы EnableSomething/DisableSomething, но не SetSomething. Ваше мнение?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/AwAaf2mUFo8" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Fri, 12 Mar 2010 08:11:17 GMT</pubDate>
		
			<author>kvasya &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Инкапсуляция коллекции</title>
		<link>http://www.rsdn.ru/Forum/design/3732495.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3732495.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3732495.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3732495</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3732495.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3732495</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Здрвавствуйте,&lt;br /&gt;
&lt;br /&gt;
Допустим есть класс&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;&lt;span class='kw'&gt;public class&lt;/span&gt; Group
{
  ...
  &lt;span class='kw'&gt;public readonly&lt;/span&gt; CustomCollection Items; &lt;span class='com'&gt;// Коллекция кастомная потому что там при добавлении элемента происходит некоторая простенькая валидация&lt;/span&gt;
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Нужно, чтобы при добавлении элемента в группу (т.е. класс представляет собой некоторую группу), он добавлялся в коллекцию и сохранялся в БД.&lt;br /&gt;
Сейчас это делается вызовом метода сервиса:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;&lt;span class='kw'&gt;public class&lt;/span&gt; GroupService
{
  ...
  &lt;span class='kw'&gt;public static void&lt;/span&gt; AddElementToGroup(Group &lt;span class='kw'&gt;group&lt;/span&gt;, Element element)
  {
    GroupAccessor.AddElementToDb(Group &lt;span class='kw'&gt;group&lt;/span&gt;, Element element);
    &lt;span class='kw'&gt;group&lt;/span&gt;.Items.Add(element);
  }
  ...
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Проблема например в том, что кто угодно может добавить элемент в коллекцию, или удалить элемент, и не сохранить это в БД. &lt;br /&gt;
Т.е. нужно, чтобы только GroupService мог изменять коллекцию.&lt;br /&gt;
&lt;br /&gt;
Какие варианты:&lt;br /&gt;
&lt;br /&gt;
1) Оставить как есть, т.е. если программист изменит коллекцию без сохранения изменений в БД &amp;mdash; то он сам виноват. Мне это не нравится.&lt;br /&gt;
&lt;br /&gt;
2) Сделать коллекцию "умной", т.е. чтобы она знала о классе GroupAccessor (класс уровня DAL), и при изменении коллекции, чтобы она сама вызывала методы для сохранения изменений в БД.&lt;br /&gt;
&lt;br /&gt;
3) Сделать класс Group имутабельным, т.е. коллекцию сделать, read only и чтобы для изменении коллекции нужно было создать новый объект Group и передать новую коллекцию в конструктор. Тогда метод GroupService.AddElementToDb() будет возвращать новый объект Group c новой коллекцией (с добавленным элементом). Мне не очень нравится этот вариант. К тому же если у нас есть байндинг на коллекцию, то нужно будет постоянно его полностью обновлять, т.е. например при добавлении элемента в группу переустанавливать DataSource грида (присваивать датасурсу новый объект Group.Items).&lt;br /&gt;
&lt;br /&gt;
4) Можно сделать специальный интерфейс, содержащий методы для изменения коллекции, и explicitly его реализовать. Тогда коллекцию можно будет изменить только после каста к этому интерфейсу. Т.е. программеру уже будет сложнее просто так добавить элемент в коллекцию. А класс GroupService будет делать приведение к этому интерфейсу и добавлять элемент в коллекцию. Вариант не самый красивый, и не гарантирует полной защиты от дурака, но все же повышает инкапсуляцию. К тому же явная реализация интерфейса как раз иногда использоваться для таких задач.&lt;br /&gt;
&lt;br /&gt;
Что посоветуете?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/RcSGy3bLquo" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Thu, 11 Mar 2010 23:16:58 GMT</pubDate>
		
			<author>MozgC &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Посоветуйте технологии</title>
		<link>http://www.rsdn.ru/Forum/design/3731289.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3731289.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3731289.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3731289</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3731289.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3731289</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Есть система "БД &amp;mdash; шлюз &amp;mdash; клиент".&lt;br /&gt;
Шлюз &amp;mdash; серверная программа принимающая информацию от клиентов и других источников и взаимодействующая с БД.&lt;br /&gt;
Для работы пользователя предполагается два вида клиентов &amp;mdash; десктопный и Web.&lt;br /&gt;
Подскажите пожалуйста какие технологии лучше использовать для разработки каждого звена из требования оптимального соотношения стоимости разработки и качества.&lt;br /&gt;
Пока мое представление такое:&lt;br /&gt;
Шлюз: С++  (возможно Java, сомневаюсь на счет производительности)&lt;br /&gt;
Web клиент: PHP (возможно ASP.NET, но напрягает привязка к Windows)&lt;br /&gt;
Десктопный клиент: Java&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/TPjyiEDBfMA" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Thu, 11 Mar 2010 04:23:02 GMT</pubDate>
		
			<author>sleep_X &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>ORM ?</title>
		<link>http://www.rsdn.ru/Forum/design/3729745.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3729745.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3729745.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3729745</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3729745.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3729745</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Коллеги.&lt;br /&gt;
&lt;br /&gt;
Поделитесь познаниями по следующему вопросу.&lt;br /&gt;
&lt;br /&gt;
У нас есть реляционная БД, в которой структура таблиц соответствует бизнес-объектам(сущностям). Чтение-сохранение реализовано в виде хранимок БД, фактически для каждой сущности реализованы процедуры read-write. Там же сейчас реализована бизнес-логика работы приложения. &lt;br /&gt;
Есть задача с минимальными переделками вынести часть функциональности программы в Application Server на Java и обеспечить представление сущностей в Object-структуре (нарисовать xsd-шки со структурой объектов и уметь мэппить их на базу).&lt;br /&gt;
&lt;br /&gt;
Проблема.&lt;br /&gt;
Разрулить переход от ссылочной модели представления данных к объектной. (не знаю поможет ли нам здесь ORM, т.к. читать-писать надо продолжать через хранимки).&lt;br /&gt;
&lt;br /&gt;
Пример. Есть клиент, у него есть договора, у которых в свою очередь есть счета, схемы тарифов и.т.п. У каждой сущности свой набор атрибутов.&lt;br /&gt;
Client &lt;br /&gt;
	Id&lt;br /&gt;
	Name&lt;br /&gt;
	ValidDate&lt;br /&gt;
	...&lt;br /&gt;
	Pact10&lt;br /&gt;
		PactNumber&lt;br /&gt;
		PactDate&lt;br /&gt;
		TariffPlan&lt;br /&gt;
		Account&lt;br /&gt;
		 ..&lt;br /&gt;
&lt;br /&gt;
В БД это все само собой хранилось в виде foreign key и при необходимости вытаскивалось чтением из таблиц.&lt;br /&gt;
В Java есть желание сделать поуровневое чтение объекта &amp;mdash; т.е. сначала читаем первый уровень вложенности объекта (Client). Если идет обращение ко второму уровню вложенности (например, к Pact), а структура Pact не начитана, начитать ее из БД. И так далее &amp;mdash; по мере обращения к полям начитывать соответствующие структуры.&lt;br /&gt;
Также в каждой структуре хранить флаг валидности объекта &amp;mdash; если данные допустим объекта-договора изменились &amp;mdash; перед выполнением какого-либо действия надо сказать, чтобы сохранил персистенцию в базу.&lt;br /&gt;
&lt;br /&gt;
Самое главное, чего не охота делать &amp;mdash; дорисовывать указанную функциональность в методы каждого класса вручную.&lt;br /&gt;
Сейчас пользуюсь JAXB'ом для генерации структуры классов описанной в XSD, но очень хочется, чтобы они сразу генерились с "умными" геттерами/сеттерами.&lt;br /&gt;
&lt;br /&gt;
Может есть какие шаблоны/методики/технологии на этот счет?&lt;br /&gt;
&lt;br /&gt;
P.S. С Явой начал дружить совсем недолго, поэтому еще могу не сильно ориентироваться в инструментарии &amp;mdash; если подскажите в каком направлении двигаться, с меня пиво &lt;img border='0' width='15' height='15' src='http://www.rsdn.ru/Forum/images/smile.gif' /&gt;&lt;div class='tagline'&gt;... &amp;lt;&amp;lt; RSDN@Home 1.2.0 alpha 4 rev. 1138&amp;gt;&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/kFjQLUK4WRA" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Tue, 09 Mar 2010 22:42:24 GMT</pubDate>
		
			<author>JazzzMaster &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Целесообразность использования DI-фреймворков</title>
		<link>http://www.rsdn.ru/Forum/design/3727432.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3727432.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3727432.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3727432</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3727432.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3727432</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Существует такой популярный паттерн &amp;mdash; инъекция зависимости (DI) Реализация данного паттерна традиционно предполагает использование того или иного IoC контейнера. Рассмотрим пример:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;class&lt;/span&gt; Bar 
{
    &lt;span class='kw'&gt;public&lt;/span&gt; Bar(&lt;span class='kw'&gt;string&lt;/span&gt; message)
    {
        Message = message;
    }
    &lt;span class='kw'&gt;public string&lt;/span&gt; Message { &lt;span class='kw'&gt;get&lt;/span&gt;; &lt;span class='kw'&gt;private set&lt;/span&gt;;}
}

&lt;span class='kw'&gt;interface&lt;/span&gt; IBarProvider
{ 
    Bar GetBar(); 
}

&lt;span class='kw'&gt;class&lt;/span&gt; HelloBarProvider:IBarProvider
{
    &lt;span class='kw'&gt;public&lt;/span&gt; Bar GetBar()
    {
        &lt;span class='kw'&gt;return new&lt;/span&gt; Bar(&lt;span class='str'&gt;"Hello"&lt;/span&gt;);
    }
}

&lt;span class='kw'&gt;class&lt;/span&gt; Foo
{
    &lt;span class='kw'&gt;public&lt;/span&gt; Foo(IBarProvider barProvider)
    {
        _barProvider = barProvider;
    }
    
    &lt;span class='kw'&gt;public&lt;/span&gt; Execute()
    {
        Console.WriteLine(_barProvider.GetBar().Message);
    }
    
    IBarProvider _barProvider;
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Задача IoC контейнера в данном случае &amp;mdash; это определить зависимость между классом "Foo" и классом "HelloBarProvider" (поскольку эти классы друг о друге вообще не знают). Например, при использовании Spring конфигурация контейнера будет выглядеть как:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Вариант 1:&lt;/i&gt;&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&amp;lt;object id="barProvider" type="Namespace.HelloBarProvider, assembly" /&amp;gt;
&amp;lt;object id="foo" type="Namespace.Foo, assembly"&amp;gt;
    &amp;lt;constructor-arg ref="barProvider" /&amp;gt;
&amp;lt;/object&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Без использования DI-фреймворка аналогичный код можно было бы написать слудующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Вариант 2:&lt;/i&gt;&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;class&lt;/span&gt; DIContainer
{
    &lt;span class='kw'&gt;public&lt;/span&gt; DIContainer()
    {
        BarProvider = &lt;span class='kw'&gt;new&lt;/span&gt; HelloBarProvider();
        Foo = &lt;span class='kw'&gt;new&lt;/span&gt; Foo(BarProvider);
    }
    &lt;span class='kw'&gt;public&lt;/span&gt; IBarProvider BarProvider { &lt;span class='kw'&gt;get&lt;/span&gt;; &lt;span class='kw'&gt;set&lt;/span&gt;; }
    &lt;span class='kw'&gt;public&lt;/span&gt; Foo Foo { &lt;span class='kw'&gt;get&lt;/span&gt;; &lt;span class='kw'&gt;set&lt;/span&gt;; }
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Вариант 2 имеет следующие преимущества:&lt;br /&gt;
1) Он проще, поскольку не требуется знания DI-фреймворка и специфики его использования&lt;br /&gt;
2) Он значительно надежней, так как корректность кода проверяется компилятором. Например, если мы добавим в HelloBarProvider еще один конструктор и забедем внести соответствующие изменения в IoC контейнер, то в первом случае мы это увидим только в run-time с трудночитаемым текстом исключения, а во втором нам об ошибке сразу сообщит компилятор.&lt;br /&gt;
3) Он значительно легче в поддержке, так как можно использовать стандартные средства рефакторинга кода. Например, если мы решим переименовать IBarProvider, то все соответствующие изменения будут автоматически отражены в коде контейнера&lt;br /&gt;
4) Вариант 2 легче писать, так как мы имеем полную поддержку со стороны IDE в виде intellisence, code completion и пр.&lt;br /&gt;
5) Он гибче, так как позволяет реализовать произвольную сложную логику определения зависимостей.&lt;br /&gt;
6) Вариант 1 нарушает инкапсуляцию, так как выставляет наружу "кишки" приложения.&lt;br /&gt;
7) Вариант 2 можно отлаживать по шагам.&lt;br /&gt;
8) В случае ошибок мы имеем удобоваримые исключения с нормальным call-stack&lt;br /&gt;
9) Вариант 2 обладает на порядок большим количеством возможностей для декомпозиции сложной логики, чем XML&lt;br /&gt;
10) Вариант 1 нарушает принцип KISS&lt;br /&gt;
&lt;br /&gt;
Тем не менее, на практике как правило используют первый вариант, и я хотел бы разобраться в причинах. Предвижу следующие ответы:&lt;br /&gt;
&lt;br /&gt;
1) "Вариант 1 позволяет гибко конфигурировать приложение." &amp;mdash; Задача определения зависимостей между типами и задача конфигурирования приложения &amp;mdash; это две совершенно разные задачи и при попытке их смешать мы автоматически нарушаем SRP, что влечет за собой кучу проблем.&lt;br /&gt;
2) "Вариант 1 более декларативен" &amp;mdash; Ну да, и дальше то что? Какие мы получаем благодаря этому преимущества? (про недостатки я писал выше)&lt;br /&gt;
3) "Вариант 1 &amp;mdash; это не только XML, есть фреймворки с fluent-interface" &amp;mdash; да, такие фреймворки являются меньшим злом, так как они лишены части недостатков. Но тем не менее в чем заключается их смысл? Какие дополнительные возможности они дают?&lt;br /&gt;
&lt;br /&gt;
Что еще?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/ievM6i2P0JY" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Sun, 07 Mar 2010 16:12:50 GMT</pubDate>
		
			<author>mrTwister &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>146</slash:comments>
		
	</item>

	<item>
		<title>PowerDesigner brunch</title>
		<link>http://www.rsdn.ru/Forum/design/3726016.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3726016.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3726016.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3726016</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3726016.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3726016</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Юзаю PowerDesigner 15.0.&lt;br /&gt;
Столкнулся с проблемой. Создаю бранч. Он цепляет последнюю версию из базового бранча, например, 2, и начинает вести внутри себя нумерацию типа 2.1.1, 2.1.2 и т.п.. В базовом бранче создаю версию 3. Каким образом мне зацепить её в дочернем бранче, чтобы можно было вести такую же ветку 3.1.1, 3.1.2 и т.п.?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/glYU0YFXtDY" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Fri, 05 Mar 2010 13:31:12 GMT</pubDate>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Как правильно? Совместное использование данных?</title>
		<link>http://www.rsdn.ru/Forum/design/3724087.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3724087.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3724087.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3724087</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3724087.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3724087</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Друзья, доброго времени суток!&lt;br /&gt;
Прошу совета вот в каком вопросе:&lt;br /&gt;
Есть у меня в проекте один объект, который выкачивает данные из Ini-файла, назовем его Config. Инишник содержит настройки для 4х объектов проекта, настройки разделены по "секциям". Вышеописанные четыре объекта относятся к разным "слоям" приложения &amp;mdash; два к сетевому уровню, два к гуям и ничего друг о друге не знают. &lt;br /&gt;
Те объекты, что относятся к сетевому уровню создаются объектом-контроллером сетевого слоя. Гуевые объекты создаются контроллером слоя отображения. &lt;br /&gt;
&lt;br /&gt;
Алгоритм работы приложения выглядит так:&lt;br /&gt;
&lt;br /&gt;
Запуск приложения&lt;br /&gt;
Шаг 1 &amp;mdash; Создание объекта Config, считывание информации из инишника&lt;br /&gt;
Шаг 2 &amp;mdash; Создание контроллера сетевого слоя&lt;br /&gt;
   Шаг 2.1 &amp;mdash; Создание первого объекта сетевого слоя (приемника)&lt;br /&gt;
   Шаг 2.2 &amp;mdash; Создание второго объекта сетевого слоя (передатчика)&lt;br /&gt;
Шаг 3 &amp;mdash; Создание контроллера слоя отображения&lt;br /&gt;
   Шаг 3.1 &amp;mdash; Создание первого объекта слоя отображения (диалога входа в систему)&lt;br /&gt;
   Шаг 3.2 &amp;mdash; Создание второга объекта слоя отображения (диалога настроек системы)&lt;br /&gt;
Шаг 4 &amp;mdash; Начало работы&lt;br /&gt;
&lt;br /&gt;
Выше приведенные четыре объекта сетевого и слоя отображение необходимо сконфигурировать перед началом работы, то есть двть им данные из инишника. Хотелось бы спросить совета как это лучше сделать.&lt;br /&gt;
&lt;br /&gt;
Сам рассматриваю следующие варианты:&lt;br /&gt;
1. Дать указатель на Config контроллеру сетевого слоя и контроллеру слоя отображения, после чего контроллеры выбирают данные из конфига и передают уже только необходимую информацию своим объектам.&lt;br /&gt;
2. Передавать указатель на конфиг всем четырем объектам. Объекты сами выбирают необходимую информацию из конфига.&lt;br /&gt;
3. Сделать Config глобальным и позволить объектам работать с ним напрямую&lt;br /&gt;
&lt;br /&gt;
Немного об объекте Config &amp;mdash; он считывает информацию из ини-файла во внутреннее хранилище, все манипуляции происходят с копией данных в этом самом внутреннем хранилище. При завершении внутренняя информация выгружается на диск.&lt;br /&gt;
&lt;br /&gt;
Пишу на C++ с MFC.&lt;br /&gt;
&lt;br /&gt;
Буду рад любым советам.&lt;br /&gt;
Спасибо.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/eDXz5edZODY" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Wed, 03 Mar 2010 16:38:23 GMT</pubDate>
		
			<author>ifndef &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>TDD и проектирование</title>
		<link>http://www.rsdn.ru/Forum/design/3723537.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3723537.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3723537.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3723537</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3723537.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3723537</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Здравствуйте, уважаемые коллеги&lt;br /&gt;
&lt;br /&gt;
Хочу внедрять практику TDD, т.е. что бы разработка была через тестирование. &lt;br /&gt;
Плюсы unit tests очевидны &amp;mdash; проект более легко сопровождаем, если есть unit tests.&lt;br /&gt;
&lt;br /&gt;
Основной посыл TDD &amp;mdash; вначале тест и говнокод &amp;mdash; потом проектирование и рефакторинг.&lt;br /&gt;
Т.е. программист P1 начинает реализовывать задачу T1, то у него нет никаких диаграмм классов.&lt;br /&gt;
Классы и правильный дизайн будет на выходе после рефакторинга. Все просто замечательно.&lt;br /&gt;
Но, а как же работа в команде? Если P1 не реализовал метод сохранение объекта O1 а этот метод нужен программисту P2?&lt;br /&gt;
Понятно, что программист P2 может сделать фиктивный метод, но ему нужен хотя бы прототип этого метода &amp;mdash; сигнатура метода, &lt;br /&gt;
типы генерируемых исключений и т.д. Но методология TDD не позволяет программисту P1 распылять свои усилия и пока он не решит свою текущую проблему, он преступить к методу сохранения объекта O1 не может. Как быть? Понятно, что нужен некоторый интерфейс, что бы программист P2 не дожидался реализации метода сохранения объекта O1, а мог бы использовать фиктивную реализацию этого метода.&lt;br /&gt;
&lt;br /&gt;
Вопрос в том, что концепция TDD, как бы не совсем приветствует проектирование наперед, но в то же время какой-то интерфейс должен быть, т.е. в приложении должны быть выделены слои и должен быть интерфейс? Меня не особо интересует как бы теория, нужны больше примеры из реальной командной разработки ( у К. Бека книга хороша, но нет примера командной разработки).&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/ph1q-Px6JGA" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Wed, 03 Mar 2010 10:05:46 GMT</pubDate>
		
			<author>white_znake &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>18</slash:comments>
		
	</item>

	<item>
		<title>Архитектура многопоточных приложений</title>
		<link>http://www.rsdn.ru/Forum/design/3720573.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3720573.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3720573.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3720573</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3720573.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3720573</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Здравствуйте!&lt;br /&gt;
Можете подсказать, какую-нибудь литературу, сайты и т.п. по основным принципам проектирование многопоточных систем? В приложении, разработкой которого я занимаюсь, довольно много объектов со своим потоком выполнения; проблема в том что несмотря на довольно большое время тестирования приложения всё равно периодически вылазят баги с какой-то взаимоблокировкой, которая была всегда, но по какой-то причине до этого себя не проявляла. Хотелось бы узнать, как такие проблемы решаются обычно &amp;mdash; какие-нибудь паттерны и т.п.&lt;br /&gt;
&lt;br /&gt;
Заранее спасибо за помощь.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/RNJoYXkMDRY" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Sun, 28 Feb 2010 16:07:46 GMT</pubDate>
		
			<author>IZer &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Посоветуйте паттерн(?)</title>
		<link>http://www.rsdn.ru/Forum/design/3718026.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3718026.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3718026.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3718026</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3718026.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3718026</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Есть некая сущность, называемая юнит (Unit), состоящая из нескольких пакетов (Package), каждый из которых состоит из нескольких групп (Group), каждая из которых содержит некоторое число элементов (Element), которые могут иметь один из фиксированного числа типов (Type1,...TypeN). То есть по сути Unit представляет из себя древовидную структуру, фиксированной глубины, листьями которой являются Element-ы. Каждая из сущностей (Unit, Package, Group, ElementOfTypeN) имеет свой набор атрибутов.&lt;br /&gt;
&lt;br /&gt;
Для подобных юнитов существует операция "сериализации/десериализации". Эта операция должна предоставлять возможность использования внутри себя разных механизмов. Например, простейший вариант &amp;mdash; сериализовать в виде XML документа в файл. Другой вариант &amp;mdash; это сериализовать юнит в файловую структуру, где Unit, Package, Group &amp;mdash; директории, Element &amp;mdash; файл, причем сериализация может проходить как в локальную файловую систему, так и через, например, FTP. Третий варинт &amp;mdash; сериализация в БД.&lt;br /&gt;
&lt;br /&gt;
Вопрос &amp;mdash; как бы вы предложили организовать такой функционал с точки зрения паттернов-интерфейсов-классов? На верхнем уровне напрашивается паттерн Strategy. А вот дальше? Хочется прежде всего отделить обход дерева от непосредственной "сериализации" конкретной сущности.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/IS0nT1vHM-4" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Fri, 26 Feb 2010 09:54:43 GMT</pubDate>
		
			<author>Jeremy &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>4</slash:comments>
		
	</item>

	<item>
		<title>Обязанности архитектора ПО</title>
		<link>http://www.rsdn.ru/Forum/design/3717506.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3717506.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3717506.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3717506</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3717506.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3717506</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Извините, если баян. Хотелось бы узнать, какие у архитектора ПО вообще обязанности при "правильном" подходе к разработке ПО. Вопрос чисто практический.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/ECdbVgynX0Q" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Thu, 25 Feb 2010 19:53:52 GMT</pubDate>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Посоветуйте софтина или либа для анализа текста</title>
		<link>http://www.rsdn.ru/Forum/design/3716884.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3716884.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3716884.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3716884</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3716884.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3716884</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Сорри, если не очень подходящий форум... но более подходященго не нашел.&lt;br /&gt;
&lt;br /&gt;
Возникла проблема анализа текста и преобразования его в комманду. Например, приходит текст "Какой у меня баланс?" или "Сколько денег у меня на счету?", надо чтобы любое из этих сообщений преобразовывалось в комманду "balance_request", ну или что-то в этом роде. Очень надеюсь, что уже сущесвует какая-то софтина или библиотека, которая умеет это делать. Желательно на java.&lt;br /&gt;
Ну или может кто-то уже решал подобную проблему и может что-то хорошее посоветовать?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/bwgOhGWbxHk" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Thu, 25 Feb 2010 13:02:17 GMT</pubDate>
		
			<author>StanislavK &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>7</slash:comments>
		
	</item>

	<item>
		<title>Фабрика объектов</title>
		<link>http://www.rsdn.ru/Forum/design/3716794.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3716794.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3716794.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3716794</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3716794.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3716794</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Возьмем модульную архитектуру , есть несколько базовых типов объектов, каждый базовый тип описан в своем модуле.&lt;br /&gt;
У каждого базового типа есть производные типы, в зависимости от состояния программы ( оно одно для всех ) используется тот или иной производный тип.&lt;br /&gt;
&lt;br /&gt;
в коде в зависимости от состояния нужно выбирать нужный объект&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
CBaseA* object_a;

&lt;span class='kw'&gt;switch&lt;/span&gt;( state )
{
  &lt;span class='kw'&gt;case&lt;/span&gt; 1: object_a = &lt;span class='kw'&gt;new&lt;/span&gt; CDerivedA1(); &lt;span class='kw'&gt;break&lt;/span&gt;;
  &lt;span class='kw'&gt;case&lt;/span&gt; 2: object_a = &lt;span class='kw'&gt;new&lt;/span&gt; CDerivedA2(); &lt;span class='kw'&gt;break&lt;/span&gt;;
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
естественно это использовать во всех местах кода где идет использование объекта типа CBaseA неудобно и лучше сделать 1 раз фабричный метод&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;static&lt;/span&gt;  CBaseA* CreateObjectA()
{

&lt;span class='kw'&gt;switch&lt;/span&gt;( state )
{
  &lt;span class='kw'&gt;case&lt;/span&gt; 1: &lt;span class='kw'&gt;return new&lt;/span&gt; CDerivedA1();
  &lt;span class='kw'&gt;case&lt;/span&gt; 2: &lt;span class='kw'&gt;return new&lt;/span&gt; CDerivedA2();
}

}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Вот возникает вопрос, где лучше этот метод описать &amp;mdash; есть 2 варианта , 1й &amp;mdash; в самом базовом типе CBaseA, CBaseB и т.д. C,D,E... в виде статического метода, 2й &amp;mdash; создать статический тип CObjectFactory и в нем статическими методами описать создание объектов каждого типа A, B, C, D и т.д.&lt;br /&gt;
&lt;br /&gt;
Что же получается в результате в обоих вариантах &amp;mdash; зацикленность или избыточность ссылок&lt;br /&gt;
&lt;br /&gt;
1й вариант &amp;mdash; получается зацикленность ссылок, то есть если раньше базовый тип ничего не знал о объектах которые от него наследуются , то теперь для того чтобы базовый тип мог создавать производные нужно ему включить include все хедеры производных типов. Также минус в том что состояние в данном случае придется хранить для каждого объекта или выносить в отдельный статический синглетон.&lt;br /&gt;
&lt;br /&gt;
2й вариант &amp;mdash; синглетон CObjectFactory который может создать объект любого типа A, B, C и т.д., он получается зависим от всех модулей, при этом остальные модули вроде как от него отделены и не связаны между собой &amp;mdash; на первый взгляд то что нужно. Но вот допустим модуль B решил использовать объект модуля А , соотвественно создать этот объект он теперь должен через фабрику, как только мы подключим фабрику получится что объект модуля B становится зависим от всех остальных модулей которые фабрика может создавать.&lt;br /&gt;
&lt;br /&gt;
Как это решается ?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/WZMlCTgeHxI" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Thu, 25 Feb 2010 12:14:44 GMT</pubDate>
		
		
			<slash:comments>5</slash:comments>
		
	</item>

	<item>
		<title>Схема IT-Инфраструктуры предприятия</title>
		<link>http://www.rsdn.ru/Forum/design/3715670.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3715670.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3715670.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3715670</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3715670.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3715670</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Привет.&lt;br /&gt;
&lt;br /&gt;
Для составления документации в одном из проектов мне понадобилась красивая диаграмма/схема&lt;br /&gt;
идеальной IT-инфраструктуры крупной компании.&lt;br /&gt;
Т.е что бы там были отмечены используемые продукты&lt;br /&gt;
&lt;br /&gt;
&amp;mdash; CRM&lt;br /&gt;
&amp;mdash; ERP&lt;br /&gt;
&amp;mdash; Утилиты мониторинга &amp;mdash;  Hp Open View, Tivoli Performance Viewer и т.п.&lt;br /&gt;
&amp;mdash; Базы данных&lt;br /&gt;
&amp;mdash; Прикладные пакеты&lt;br /&gt;
&amp;mdash; Приложения для управления пользователями &amp;mdash; Active Directory и др.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ну и т.п.&lt;br /&gt;
&lt;br /&gt;
Первые полчаса поиска в гугле не дали результата.&lt;br /&gt;
Может кто знает где взять такую картинку? Обычно в маркетинговых книжечках IBM'a, Oracle'a печатают подобные диаграммы.&lt;br /&gt;
Или придется самому рисовать?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/ycXxsKz0h6o" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Wed, 24 Feb 2010 15:18:38 GMT</pubDate>
		
			<author>NorthDragon &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Посоветуйте подход к редактированию б.о. пользователем</title>
		<link>http://www.rsdn.ru/Forum/design/3713559.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3713559.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3713559.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3713559</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3713559.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3713559</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Здравствуйте.&lt;br /&gt;
Есть бизнес-объект, персистный, при изменении свойств переходит в соответствующие состояния.&lt;br /&gt;
Бизнес объект прикреплён к бизнес-транзакции, которая обновляет БД при коммите, там же инициируется валидация зарегистрированных на добавление и обновление объектов перед обращением к БД.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что необходимо сохранять даже невалидное текущее состояние в БД редактируемого объекта.&lt;br /&gt;
На уровне БД возможность сохранения текущего состояния реализована, вот пока не придумаю как реализовать сохранение невалидного состояния из BLL.&lt;br /&gt;
Может быть подскажете подход?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/2zGctQn1vVY" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Mon, 22 Feb 2010 11:10:28 GMT</pubDate>
		
			<author>WSA &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>30</slash:comments>
		
	</item>

	<item>
		<title>Обновление: 25 Most Dangerous Programming Errors</title>
		<link>http://www.rsdn.ru/Forum/design/3712479.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3712479.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3712479.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3712479</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3712479.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3712479</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Обновился документ &lt;a href="http://cwe.mitre.org/top25/" class="m" target="_blank"&gt;2010 CWE/SANS Top 25 Most Dangerous Programming Errors&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/nAq_5kM6Yzw" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Sat, 20 Feb 2010 18:30:32 GMT</pubDate>
		
			<author>cvoronin &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Rich какбы.. Обновление связей между объектом и коллекцией</title>
		<link>http://www.rsdn.ru/Forum/design/3708943.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3708943.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3708943.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3708943</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3708943.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3708943</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Реализован persistence, в котором объявлен класс, который является базовым для объектов модели.&lt;br /&gt;
При изменении свойсв доменного объекта, он меняет своё состояние и регистрирует операцию обновления или удаления или создания в транзакции uow.&lt;br /&gt;
В принципе реализован Lazy-load list. При запросе к которому он заполняется объектами домена.&lt;br /&gt;
&lt;br /&gt;
Объект и определённая в нём коллекция других объектов(доступная через lazy-list) связаны через отношение многие ко многим:&lt;br /&gt;
&lt;br /&gt;
ну допустим так...:&lt;br /&gt;
Проект.LazyList&amp;lt;Сотрудник&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В БД, так:&lt;br /&gt;
Проект 1--*СотрудникиНаПроекте*--1 Сотрудник&lt;br /&gt;
&lt;br /&gt;
Вопрос в том, что при изменении Проект.LazyList&amp;lt;Сотрудник&amp;gt; &amp;mdash; списка мне обновить таблицу СотрудникиНаПроекте?&lt;br /&gt;
&lt;br /&gt;
Написать в Менеджере в BLL метод типа ИсключитьСотрудникаИзПроекта(Проект, СотрудникID) ?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/4cXk2PbAbvQ" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Wed, 17 Feb 2010 19:31:44 GMT</pubDate>
		
			<author>WSA &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>[ANN] Руководство MICROSOFT® по проектированию архитектуры</title>
		<link>http://www.rsdn.ru/Forum/design/3707875.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/design/3707875.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/design/3707875.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3707875</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3707875.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3707875</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Теперь на русском &lt;a href="http://apparchguide.ms/" class="m" target="_blank"&gt;здесь&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/design/~4/bMFSp3VnsQU" height="1" width="1"/&gt;</description>
		
		<category>design</category>
		<pubDate>Wed, 17 Feb 2010 10:01:43 GMT</pubDate>
		
			<author>ankorol &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>
</channel>
</rss>
