7322
правки
Изменения
м
Максим Цепков рассказал о паттернах в реализации учетных систем.
Более подробную аннотацию, см. [http://lib.custis.ru/%D0%9C%D0%B0%D0%BA%D1%81:_Application_Developer_Days_2010_-_%D1%82%D0%B5%D0%B7%D0%B8%D1%81%D1%8B по ссылке].
== Примечания ==
* [http://addconf.ru/event.sdf/ru/add_2010/authors/132/169 страничка доклада на сайте конференции]
<references/>
Нет описания правки
<center><big>'''Учетная машина — универсальная архитектура учетно-аналитических систем'''</big></center>
[http://addconf.ru/event.sdf/ru/add_2010/authors/132/169 страничка доклада на сайте конференции]
== Аннотация ==
<blockquote>
Учетный функционал является непременной частью большого количества систем, играя во многих ведущую роль. Вместе с тем, не существует распространенных шаблонов его проектирования и реализации, в отличие от многих других распространенных классов задач. Исключение составляют лишь ''Patterns for Accounting'' от Мартина Фаулера ([http://martinfowler.com/apsupp/accounting.pdf http://martinfowler.com/apsupp/accounting.pdf] и [http://martinfowler.com/eaaDev/AccountingNarrative.html http://martinfowler.com/eaaDev/AccountingNarrative.html]), однако они ориентированы на относительно узкий класс систем и не завершены. За время существования нашей компании мы разработали множество учетно-аналитических систем и выработали свой шаблон их реализации — '''''учетную машину'''''. Он включает в себя не только бухгалтерский учет, но и широкий спектр задач, таких как ведение остатков на складе, или текущих долгов клиентов.
</blockquote>
{{vimeoembed|17798822|720|405}}
== Развернутая аннотация ==
Учетный функционал является непременной частью большого количества систем, играя во многих ведущую роль. Вместе с тем, не существует распространенных шаблонов его проектирования и реализации, в отличие от многих других распространенных классов задач. Исключение составляют лишь ''Patterns for Accounting'' от Мартина Фаулера (http://martinfowler.com/apsupp/accounting.pdf и http://martinfowler.com/eaaDev/AccountingNarrative.html), однако они ориентированы на относительно узкий класс систем и не завершены. За время существования нашей компании мы разработали множество учетно-аналитических систем и выработали свой шаблон их реализации — '''''учетную машину'''''. Он включает в себя не только бухгалтерский учет, но и широкий спектр задач, таких как ведение остатков на складе, или текущих долгов клиентов. Этот шаблон и будет представлен в докладе.
Функционал учета выделяется в отдельный учетный слой приложения. Он обеспечивает ведение показателей, используемых как для оперативной работы и проверок бизнес-логики, так и для отчетов. Показатели ведутся с помощью проводок, создаваемых по потоку учетных событий приложения. Реализация учетной машины может быть различной. В различных проектах нашей компании применялся широкий спектр вариантов, от жесткого кодирования до универсальных машин, управляемых метаданными с различными промежуточными вариантами. В ходе этого были выработаны общие шаблоны реализации и протокола взаимодействия с бизнес-логикой документов и интерфейсным слоем приложения.
Чтобы планы счетов стали рабочим инструментом не только бухгалтера, но и разработчика, необходимы средства, обеспечивающие их наглядное и компактное представление, визуализацию. К сожалению, ни UML, ни другие стандартные нотации не содержат диаграмм для визуализации учета.
Поэтому нам пришлось разработать собственное средство визуализации — '''диаграммы планов счетов'''. С их помощью можно представить схемы учета в наглядном и понятном виде, согласовывать учет с бухгалтерами и передавать их разработчикам. В докладе демонстрируется использование диаграмм на простом модельном примере — личных финансах, а затем приведено несколько диаграмм из реальных проектов.
Диаграммы планов счетов легко понимают все участники проекта: бизнес-пользователи и эксперты заказчика, бизнес-аналитики, системные аналитики, архитекторы, разработчики, инженеры. Наряду с диаграммами классов они являются основными комплексными схемами системы, и, для учетно-аналитических систем — даже более важными, чем диаграммы классов.
Выделение шаблонов реализации для тех или иных типовых задач — важная часть процесса развития процесса разработки программного обеспечения. Применение выделенных шаблонов позволяет эффективнее строить системы, сосредотачиваясь на решении новых задач, вместо повторных поисков ранее решенных. Даже если шаблон не подходит полностью, разработка собственных решений с учетом имеющихся шаблонов — эффективнее. Мы надеемся, что представленный шаблон учетной машины поможет Вам при разработке приложений. А совместная работа — позволит развивать его и далее.
== Краткое изложение ==
=== Общий подход, методология ===
Учетный функционал является непременной частью большого количества систем, играя во многих ведущую роль. Вместе с тем, не существует распространенных шаблонов его проектирования и реализации, в отличие от многих других распространенных классов задач. Исключение составляют лишь ''Patterns for Accounting'' от Мартина Фаулера (http://martinfowler.com/apsupp/accounting.pdf и http://martinfowler.com/eaaDev/AccountingNarrative.html), однако они ориентированы на относительно узкий класс систем и не завершены. За время существования нашей компании мы разработали множество учетно-аналитических систем и выработали свой шаблон их реализации — '''''учетную машину'''''. Он включает в себя не только бухгалтерский учет или управленческий учет по МСФО, но и широкий спектр задач, таких как ведение остатков на складе, или текущих долгов клиентов. Этот шаблон и будет представлен в докладе.
Методология реализации учетного функционала приложения была взята из бухгалтерии. Это учет с помощью проводок между аналитическими счетами с двойной записью. Проводка фиксирует перемещение ресурса, а двойная запись обеспечивает консервативность учета и трассировку перемещений. Поскольку в большинстве задач учет не является замкнутым, допускается отсутствие одного из счетов. Источником проводок служат учетные события в системе, или ''операции''. Как правило, операции выполняются при изменении состояний документов.
Все эти схемы известны и применяются при реализации систем бухгалтерского учета. Однако, наш подход состоит в их применении для всех учетно-аналитических задач. При этом в рамках системы конструируется ''план счетов'', остатки и обороты которого обеспечивают необходимые показатели как для оперативной работы и проверок бизнес-логики, так и для отчетов. Такой подход обеспечивает согласование между собой оперативных и отчетных данных, что является существенным преимуществом.
=== Шаблон учетного приложения ===
Общая схема учетного приложения представлена на рисунке. При этом в учетном слое можно выделить два уровня: обработки операций и реализации планов счетов.
[[Image:App-struct-1.png|thumb|300px]]
Реализация учетного слоя может быть различной. В различных проектах нашей компании применялся широкий спектр вариантов, от жесткого кодирования до универсальных машин, управляемых метаданными с различными промежуточными вариантами. В ходе этого были выработаны общие шаблоны реализации и протокола взаимодействия с бизнес-логикой документов и интерфейсным слоем приложения.. А для наиболее устойчивой части был разработан генератор, который по XML-описанию плана счетов порождает его реализацию.
Что касается уровней реализации, то в клиент-серверной архитектуре мы обычно реализуем всю бизнес-логику приложения на сервере базы данных. В трехзвенной архитектуре планы счетов также реализуются на уровне сервера базы данных. Обработка же операций с порождением проводок может быть реализована как на уровне базы данных, так и на сервере приложений, где работает бизнес-логика документов и справочников. Бывают распределенные реализации, при которых учетные операции поступают из документооборота внешних, в том числе нескольких, систем.
Хочется остановиться на наиболее характерных частях шаблонов учетной машины, выработанных в нашей компании.
* Хранение аналитических счетов в виде гиперкуба.
* Использование двойной записи для обеспечения консервативности учета и трассировки перемещений.
* Ведение аналитических признаков как на счетах, так и на проводках. Построение детализированных и агрегированных показателей, денормализация хранения показателей для обеспечения эффективности отчетов.
* Ведение журнала операций — учетных событий системы, фиксация в этом журнале существенных для учета атрибутов документов и справочников на момент ее создания.
* Реализация состояний документов в виде графа его переходов, описываемого диаграммой состояний через методы документов.
* Поддержка соответствия между состоянием документа и отражением его в учете генерацией операций при изменении проведенного документа.
Важной особенностью ведения проектов является то, что при проектировании управленческих планов счетов мы опираемся не на правила бухгалтерского учета, а отражаем в них реальные потоки движения ресурсов.
Это позволяет создавать гораздо более простые и понятные учетные схемы, ориентированные на конкретные задачи, нежели обобщенные схемы бухгалтерского учета.
При этом учетная часть и ее схема − относительно стабильна, отражает физическое движение.
Сервис на документах можно свободно наращивать, развивая и усложняя их бизнес-логику, но пока сохраняется схема учета − работают все отчеты. Аналогично, отчетную часть можно строить, опираясь только на учетные показатели и не вникая в особенности работы бизнес-логики различных типов документов.
=== Диаграммы планов счетов ===
Чтобы планы счетов стали рабочим инструментом не только бухгалтера, но и разработчика, необходимы средства, обеспечивающие их наглядное и компактное представление, визуализацию. Средства визуализации, диаграммы являются мощным инструментов описания сложных структур, которое существенно повышает эффективность работы с ними.
Свидетельством тому — популярность UML-диаграмм и их многочисленность. К сожалению, ни UML, ни другие стандартные нотации не содержат диаграмм для визуализации учета.
Поэтому нам пришлось разработать собственное средство визуализации — '''диаграммы планов счетов'''. С их помощью можно представить схемы учета в наглядном и понятном виде, согласовывать учет с бухгалтерами и передавать их разработчикам. Они выполняются в формальной нотации, которая позволяет точно отобразить учет в системе. В докладе демонстрируется использование диаграмм на простом модельном примере — личных финансах, а затем приведено несколько диаграмм из реальных проектов.
Диаграммы планов счетов легко понимают все участники проекта: бизнес-пользователи и эксперты заказчика, бизнес-аналитики, системные аналитики, архитекторы, разработчики, инженеры. Это сильно повышает эффективность аналитической работы и качество разрабатываемых систем. Наряду с диаграммами классов они являются основными комплексными схемами системы, и, для учетно-аналитических систем — даже более важными, чем диаграммы классов.
=== Заключение ===
Выделение шаблонов реализации для тех или иных типовых задач — важная часть процесса развития процесса разработки программного обеспечения. Применение выделенных шаблонов позволяет эффективнее строить системы, сосредотачиваясь на решении новых задач, вместо повторных поисков ранее решенных. Даже если шаблон не подходит полностью, разработка собственных решений с учетом имеющихся шаблонов — эффективнее. Мы надеемся, что представленный шаблон учетной машины поможет Вам при разработке приложений. А совместная работа — позволит развивать его и далее.
== Презентация ==
{{----}}
[[Category:Архитектура]]
[[Категория:Диаграммы учета]]
[[Категория:Доклады]]