Подпишись и читай
самые интересные
статьи первым!

Действия дао. Своеобразие философских традиций Востока

Китайцы с незапамятных времен обозначают иероглифом Дао изогнутое, однолезвийное оружие. Вообще говоря так называются в Китае все клинки с изогнутым лезвием с односторонней заточкой, включая ножи, мечи и алебарды, но в случае длинного клинка обычно добавляют приставку да - большой. То есть Дадао - большой изогнутый меч с односторонней заточкой.

Мечи Дао известны в Китае с древнейших времен. До сих пор сложно сказать, какой именно тип меча появился ранее - Цзянь или Дао. По легенде мечи Дао научил китайцев делать их легендарный царь Суйхуан, первым отливший этот меч из бронзы. Вообще этот легендарный царь - аналог греческого титана Прометея, так же как и тот, он научил китайцев пользоваться огнем, плавить металлы - бронзу и получать из нее орудия труда и мечи.

Со времен династии Восточная Цзинь употребление меча Дао стало в Китае повсеместным. Мечи Дао были совершенно разные по своим размерам и назначению.

Большой меч или даже алебарда с короткой рукоятью Дадао - была принадлежностью конных воинов. Обычно ей вооружались немногочисленные тяжеловооруженные конные китайские всадники. Пехотинцы обычно использовали вместе со щитом яодао - поясной меч - клинок гораздо более скромных размеров.

Конница кроме Дадао использовала еще и пудао - аналог длинно древковой алебарды, с которой управлялась весьма ловко, не хуже, чем с копьем. Несколько отдельно стоит Шуаншоудай - длинно клинковая и длинно древковая алебарда с односторонне заточенным кривым лезвием.

Расцвет мечей Дао пришелся на династию Сун, когда появилось большое количество различных вариантов мечей Дао. Но все они делились на две основные группы - ручные мечи - одноручные и большие мечи - дадао - которые требовали владения ими двумя руками.

Во времена династии Мин китайцам пришлось познакомиться и с японскими боевыми мечами - с тати и нодати. Стоит заметить, что китайцы были очень неприятно удивлены тем, что японское оружие во всем превосходит их собственное. Китайский знаменитый полководец Ци Цзигуан отмечал, что японские мечи лучше и практичнее.

По длине тати был гораздо длиннее, чем яодао, при этом им было куда как сподручнее рубить. Он был легче и удобнее, чем китайские большие мечи - дадао.
Если же дело доходило до нодати, то и он был удобнее, чем пудао, он был короче, легче, им было проще управлять а раны он наносил ужасающие. Встретившись в Корее с вторгнувшимися японцами, во времена Хидэеси, китайцы на своей шкуре смогли убедиться, что позаимствовавшие в свое время из Китая изогнутый меч японцы, довели его до логического совершенства.

Генерал Ци Цзигуан решительно начал менять оружие китайских воинов. Он взял за основу японский тати, и совместил его с китайскими аналогами мечей дао, выработав в общем то новый тип китайского клинка - длинный, изогнутый, относительно легкий меч с односторонней заточкой. Китайский полководец создал так называемый «Меч семьи Ци» (цицзядао) - без ложной скромности присвоив мечу имя своей семьи.


Более короткий вариант, так же созданный на основе Дао - и очень популярный в прибрежных районах Китая получил название водао - меч лилипутов. Так его называли потому, что он в точности повторял размеры мечей тати японцев, которые по китайским меркам считались коротышками. Оба эти меча были крайне популярны во времена династии Мин и до самого ее падения во время крестьянского восстания и вторжения маньчжурских завоевателей.

После вторжения Маньчжуров и установления господства династии Цин (1611 - 1911 гг.)на смену господствовавшему до этого мечу цицзядао пришел другой тип меча - под общим названием «меч ивовый лист» (люедао). Это была длинная, односторонне заточенная сабля, с искривленным лезвием и рукоятью, и довольно длинным острым жалом. Некоторые экземпляры имели елмань - то есть утяжеление на конце клинка. Именно этим оружием, пригодным как к пехотному, так и к конному бою любили сражаться воинственные маньчжуры, правившие Китаем без малого 300 лет.

В Цинской армии этот вариант меча стал общеупотребимым, им были вооружены основные части армии Цинской Маньчжурской Империи.


Еще одним типом клинка дао, использовавшимся в Китае был меч пяньдао - рубящие мечи. Это в целом укороченный аналог европейской кривой сабли. За счет значительного изгиба удары таким оружием получались значительно более сильными, ими было хорошо резать противника в ближнем бою. Однако в армии такие мечи не прижились, оставшись уделом одиночек - искусных фехтовальщиков.

Очередной поворот в форме клинков китайских мечей произошел примерно в 1700 году, когда классический маньчжурский меч люедао начал преобразовываться в новую категорию мечей нювэйдао. Это как раз те устоявшиеся в нашем восприятии мечи дао, которые сейчас собственно и выдают за древние китайские образцы мечей. Нювэйдао обладали новыми признаками, которых не было у их предшественников.

Во первых, они имели расширяющиеся к концу лезвие с коротким жалом, и соответственно имели елмань на конце клинка. Они имели
относительно небольшой изгиб посередине, а рукоять изгибалась в противоположную от острия сторону, так что сам меч напоминал очень сильно растянутую букву «S». Как правило они имели круглую небольшую гарду, надежно закрывающую руку воина.

Эти мечи сразу пришлись по вкусу простым крестьянам, исконным китайцам, повстанцам всех мастей но не нашли широкого применения у маньчжурских захватчиков.

С мечами ньювэйдао китайские повстанцы воевали во время боксерского восстания. Они наголову разгромили бы маньчжур, если бы те не получили помощь от иностранных интервентов в лице Англии, Франции, Германии и России.

Как ни странно, но популярность мечей дадао вернулась в годы китайско -японской войны в 20 веке. Некоторые части китайской армии националистов Гоминьдань были вооружены такими длинными двуручными мечами.

Как оказалось, при массированных атаках японских солдат, вооруженных длинными винтовками Ариска с длинными штык ножами, противостоять китайцам с дадао в ближнем бою японцы просто не могли.

В узких переулках улиц китайских городов, в боях в траншеях массово выскакивающие на японцев китайские солдаты с мечами дадао наголо в ближнем бою получали громадное преимущество. Японцы успевали сделать один - два выстрела,как китайцы массами врывались в их порядки и начиналась кровавая бойня - защититься своими винтовками китайцы просто не могли. А мечи дадао рубили их наотмашь.

Генерал Чай Кайши уподоблял бойцов с дадао гранате с выдернутой чекой - чтобы поразить врага гранату надо бросить в гущу вражеских солдат, так и бойцы с дадао, должны были врываться в самую гущу японцев и разить направо и налево.

Даосизм – одна из самых древних религий на Земле. Его истоки уходят корнями в архаичные шаманские практики. По легенде, основы даосизма заложил Желтый император – Хуан Ши.

Китайский ученый сумел систематизировать и описать догмы и ритуалы этого учения в своей книге «Трактат о пути и его проявлениях во Вселенной».

Анализируя научное наследие Конфуция, можно заметить, связь жизненного пути философа и его идей. Но провести аналогичные параллели между творчеством и жизнью Лао–цзы невозможно, потому что его биография абсолютно неизвестна историкам. Древняя легенда гласит, что он родился от солнечного и лунного лучей, которые коснулись его матери. При этом родился он уже пожилым человеком, поскольку мать носила его в своем чреве несколько десятилетий. Поэтому его имя переводят как «Старый ребенок». По преданию, едва родившись, философ стал проповедовать учение Дао.

Что такое Дао?

Дао – это вечный путь, нескончаемая дорога без конца и края, которая проходит везде и нигде, неизвестно куда она ведет и где кончается. Дао – это вечный Абсолют, все подчинено только ему, даже Небо действует по законам Дао. Вечный путь – это также и вечное движение, поскольку в природе ничто не бывает в состоянии покоя, все постоянно течёт и изменяет. По этим же законам живёт человек.

Величайшее счастье, по мнению Лао-Цзы и его последователей, заключается в познании Дао и вечном слиянии с ним. Человек, постигший Дао и подчиняющийся его законам, обретает бессмертие. Для того чтобы понять Дао, нужно соблюдать ряд правил, касающихся питания тела и питания духа, а также соблюдать концепцию недеяния.

Человек – это собрание божественных духов и демонов, которые постоянно борются за обладание его душой. Если он кормит духов своими добрыми поступками, происходит усиление души и приближение к Абсолюту, а если человек увеличивает число демонов злыми деяниями, душа слабеет и удаляется от Дао.

Питание тела – это соблюдение особой диеты, которая заключается в практически полном отказе от физической пищи. Постоянными физическими тренировками человек должен довести свое тело до полного подчинения разуму и научиться питаться собственной слюной и росой трав и цветов.

Третий постулат Дао – концепция ничегонеделания — заключается в отказе от целенаправленной деятельности, поскольку природа сама все устраивает, так как нужно Небу и Дао, а вмешательство человека только губит всё созданное природой. Основываясь на этой идее, Лао-Цзы выводит следующую формулу, применимую к политической жизни общества: самый лучший правитель тот, кто старается ничего не делать и не менять в государстве, его подданные живут по воле Неба и сами решают собственные проблемы.

Формы проявления даосизма

Даосизм существовал в нескольких формах, каждая из которых удовлетворяла интересы отдельного слоя общества:

Философско-этическая - помогала самовыражаться образованной аристократии, позволяла понять и объяснить чувства и суть мировоззрения, цену человеческого бытия и цели пребывания каждого человека на земле.

Мистическая – воспитывала малообразованные слои населения, которые шли к монахам за советами и помощью в решении каждодневных бытовых проблем. Эта форма прививала нравственные ценности и определённые нормы поведения.

Научная – в поисках мифического эликсира бессмертия даосские монахи изобрели множество полезных предметов и веществ. Порох, стекло, компас, стенобитные орудия и многое другое появилось благодаря изысканиям этих удалившихся от мира людей. Также в рамках даосизма появлялись первые теории возникновения земли и неба, людей и всех живых существ.

В наши дни чрезвычайно популярно зародившееся в глубокой древности учение – фэншуй, которое связывает воедино стихии и судьбы людей, а также боевое учение – у-шу и дыхательная гимнастика цигун. Все эти практики выросли на базе даосизма.

Кратко об основных идеях даосизма

Даосизм зародился намного раньше конфуцианства во времена еще более жестоких междоусобных распрей и борьбы за власть. Главная идея даосизма заключается во всеобщем равенстве людей, равных правах на жизнь и свободу. Эти идеи сразу привлекли к новой религии множество сторонников из низших слоёв населения.

Бедняки, исповедавшие даосизм, надеялись, что скоро возникнет новое общество, основанное на принципах справедливости и гармонии. Под лозунгами даосизма даже проходили крестьянские волнения. Одним из самых известных восстаний в Древнем Китае было, так называемое, «восстание желтых повязок», проходившее под руководством даосского монаха. Целью этого восстания было свержение существующего политического строя и образование нового государства — всеобщего равенства и социальной справедливости.

Главная задача даосизма состоит в том, чтобы открыть людям глаза на цели их появления на свет, научить различать добро и зло, открыть секреты мироздания, научить жить в гармонии с природой и вселенной.

Еще в Средние века в Китае была создана целая сеть даосских монастырей, где проживали люди, полностью отошедшие от мира и посвятившие свою жизнь служению Небу и вечному Дао.

Монахи жили изолированно и не допускали непосвященных к лицезрению своих ритуалов. Их обряды всегда интересовали простых смертных, но монахи свято хранили свои тайны и передавали свои секреты только посвящённым ученикам.

Монастыри состояли из множества изолированных небольших полутемных келий, в которых монахи предавались размышлениям в попытках познать вечное Дао. Они иначе смотрели на социальные преобразования. Поскольку даосизм проповедует принцип неделания, то любые попытки изменить мир рассматривались как посягательство на основы вероучения, а созерцательность и уединение, наоборот, помогают слиться с Абсолютом и прожить тысячу лет в гармонии с Небом.

Поэтому особо рьяные последователи учения уходили в горы и вырубали себе каменные кельи, чтобы в полном уединении добиться бессмертия. Причем даосизм, наверное, единственная религия, которая не использует понятия Рая и Ада. Рай – это и есть бессмертная жизнь, дарованная великим Абсолютом, проведенная в размышлениях и созерцании чудес мироздания.

Мужское и женское начало в даосизме

В наши дни практически всем известно о женском и мужском начале в китайской философии – Инь и Ян. Еще в четвертом веке до нашей эры даосские монахи сумели изобразить круг, состоящих из двух начал: темного — женского и светлого — мужского.

Монахи считали, что эти два понятия нераздельны и не могут существовать друг без друга, так и жизнь каждого человека не может быть ни только светлой, ни только темной. Для женского начала характерно спокойствие и равновесие, а для мужского - активность, мощь и активный образ жизни.

Монахи считали, что эти два начала полностью дополняют друг друга, а если в человеке преобладает какое-либо одно, то жизнь его не может считаться правильной и он не сможет достичь Дао.

Обряды в даосизме

В отличие от всех других религий, даосизм не имел пышных и торжественных ритуалов, даосы проповедовали обращение к живой природе и принцип созерцательности. На обрядах не могли присутствовать непосвящённые. По этой причине и не существует даосских храмов. Единственными религиозными постройками даосов были только монастыри.

В настоящее время в Китае довольно много последователей данного учения, постоянно открываются новые монастыри и порой монахи демонстрируют свои достижения в овладении боевыми искусствами перед зрителями.

Далек от России Китай, обширна его территория, многочисленно население и беспредельно длинная и загадочная история культуры. Соединившись, как в плавильном тигле средневекового алхимика китайцы создали уникальную и неповторимую традицию. Страна «желтой пыли» была в древности закрытым миром, миром для себя самого, и, хотя Китай не избежал влияния чужестранных теорий и доктрин (например, буддизм), этот мир произвел уникальную науку, профессии и ремесла, присущие только Серединному Царству. Китай впитал в себя расовые и культурные системы, переработал их как, в доменной печи переплавив все, что было не китайским в то, что навсегда будет считаться исключительно принадлежащим Китаю.

В эпоху раннего Хань в Китае создается многообразная палитра религиозно-философских и морально-этических представлений. Они оформляются в философские школы со сложной иерархией и обязательным лидером, чей авторитет непререкаем. Каждая школа вырабатывала свой доктринальный подход к «совершенному» состоянию, свои взгляды на «идеального» правителя и лучшую политику для страны. Но были и такие философские школы, которые искали лишь путь к личному духовному совершенству и совсем не вмешивались в политику китайского государства. Наибольшее влияние на формирование китайского образа жизни в течении всей истории оказали три философские системы: духовный мистицизм Лао Цзы, морально-этическое учение Конфуция и идеалистический агностицизм, распространившийся в Китае вместе с буддизмом.

Мы в статье будем рассматривать концепт «Дао» - центральное понятие в философской системе Лао Цзы. Следует учитывать, что представления о мире, космосе, гармонии и человеке стали складываться задолго до появления даосизма. Их доносят до нас древние предания, песнопения, описания церемоний и обрядов (особенно в эпоху Тан). Многие положения будущей даосской системы были изложены в древнейших классических книгах китайской образованности. Важнейшее место среди этих книг отводится «Книге перемен».

Первоначальная космогония утверждает, что изначально была только единая и универсальная субстанция - Ци, мыслившаяся как космическое дыхание: Ци заполняла собой Небытие - Пустоту. В хтонический момент энергия Пустоты разделилась на Ян - светлое и теплое начало и Инь - темное и холодное. Затем Ян, как более легкая субстанция поднялась вверх, Инь - опустилась вниз. Первая энергия образовала Небо - Тянь. Вторая энергия образовала Землю - Кун. Ян и Инь отвечают за равновесие в мире, смену времен года, гармонию Космоса; от них берут начало все вещи и явления в мире. Поэтому древние китайцы считали, что всему присуща дуальность, сочетание двух противоположных начал: мужского и женского, светлого и темного, холодного и теплого, легкого и тяжелого и т.д. Мера присутствия в той или иной вещи Инь или Ян определяет свойства этой вещи и показывает ее сущность, значение и роль. Если мера присутствия изменяется, то меняется и сущность данной вещи. В Древнем Китае полагали, что беспредельное и равнодушное к людям Тянь имеет своего верховного владыку Шан-ди. Появление этого культа напрямую связано со становлением китайской государственности. Таким образом, как император на земле - один «сын Неба», всегда один и тот же «Возрожденный дракон», так и на Небе должен быть один правитель - это Шан-ди. Позднее Небо Поднебесной заполнили многочисленные божества и духи, с которыми китайцы учились «договариваться», соблюдая сложные и многообразные ритуалы и церемонии. Этим предписаниям соответствовал государственный стиль, определенный жизненный уклад: община, члены которой связаны узами кровного родства, общая хозяйственная деятельность, святыни, могилы предков.

В пятом веке до н.э. старые знания перестали отвечать изменившимся условиям жизни. Пришли смутные времена - эпоха Джаньго (Воюющих Царств). Мир неузнаваемо изменился, и, у людей создалось впечатление, что боги и покровители их покинули. Одним из тех, кто был готов помочь людям адаптироваться в условиях изменившийся реальности был Лао Цзы. Информация о личности мастера туманна и дискуссионна. Некоторые сведения о философе мы можем получить из труда «Ши Цзи» известного историка Сыма Цянь, но и они кажутся недостоверными. В нашем исследовании эти сведения не важны, учтем лишь, что Лао Цзы был старшим современником Конфуция и жил в эпоху Джаньго.

При знакомстве с философским мировоззрением Лао Цзы возникает закономерный вопрос: где искать истоки его философских размышлений?

В индивидуальном сознании и складе ума мыслителя;

В исторических условиях существования современного ему Китая.

Историки философии считают, что его рассуждения можно охарактеризовать как созерцательное умозрение. В трактате «Дао де Цзин» Лао Цзы пытаясь проникнуть в суть явлений и вещей скажет: «красивое - есть только безобразное, доброе - только злое».. Как это понимать? Если рассуждать в духе позднего неоплатонизма, то истинно красивое мы можем видеть только «глазами» разума, а подлинно доброе ощутит только наша душа, когда приблизится к Абсолюту Единого и растворится в нем. Как и у классика греческой мысли Платона, у Лао Цзы все материальное не подлинно. Это отраженная, кажущаяся реальность - тень подлинного мира чистых эйдосов (идей). То, что бытийствующая реальность изменчива, доказывает, согласно неоплатонику Проклу, существование неизменного, постоянного начала, которое заключает в себе подлинное бытие.

Понятие «Дао» - исходная точка всей философии Лао Цзы и фундамент его метафизики. Понятие, обозначаемое современным иероглифическим знаком Дао, образует несколько семантических рядов. В первом - наиболее распространенное значение Дао - путь, дорога, орбита. Второй ряд включает такие смысловые понятия как мораль, этика, справедливость. В третьем ряду стоят значения: слово, говорить, учение, истина и путь жизни. Вообще, иероглиф Дао состоит из двух частей: «шоу» - голова и «цзоу» - идти. Лао Цзы не изобрел этот термин, но был первым кто стал так называть сверхчувственное существо. Мыслитель поместил «Дао» в основание своей философской системы. Мы не можем сказать, что автор трактата «Дао де Цзин» объясняет. Что такое Дао. Правильнее сказать, что Хокуян бессознательно перевел свои ощущения восприятия вселенной в языковые символы. Дао нельзя познать рационально, но только экзотерически. Следовательно, чтобы понять Дао нужно прибегнуть к мистическому опыту, проникнуть в природу собственных ощущений и слиться с природой, после соединиться с миром, а это рационально не возможно. Дао бесформенно, но обладает вездесущностью, распространяется и «влево и вправо», и за каждым предметом, каждым явлением кроется, то начало, которое характеризует существование мира. Увидеть его глазами нельзя, оно доступно только в момент экзальтированного просветления. Простой обыватель, даже зная о Дао, «не узнает его», - «встречаясь с ним, не увидит его лица». Так или иначе, значение Дао настолько глубинно, что для передачи информации о нем не хватает слов. Попробуем сказать так, Дао наполнено вечностью, и в то же время оно противостоит всему сущему. С одной стороны Дао - бытие, с другой - небытие. «Безымянность - вот начало Неба и Земли». Дао существовало всегда, бесконечно порождало самого себя. Это момент предельной пустоты. Если в видимом мире вещи присутствуют реально, то в пустоте они находятся в форме потенциальных перерождений. Эта Пустота - потенциальное пространство, в котором нет ничего и допускается, существование всего. И «бытие возникает из небытия». Вместе с тем в туманности Дао скрыты вещи. Рождение вещей, включая и поступки, и мысли, и характеры, и предметы, и вообще все, что существует в мире, - происходит как постепенная, необходимая и осмысленная утрата единства: одно рождает два, два - три и т.д. Если вновь начать сравнивать эту позицию с греческой мыслью, то подобные рассуждения мы найдем у Пифагора Самосского. Вернемся мысленно в Китай. Мы рассуждали о концепте Дао. Но Дао неделимо внутри себя, это единство представляется кругом бесконечным в своем круговом движении: «В возрастании десяти тысяч вещей я зрю их возвращение. Вещей несметно много, и каждая возвращается к своему корню. Возвращение к корню называется покоем. Это означает возвращение к судьбе. Возвращение к судьбе делает незыблемым».. Согласно даосизму в круге противоположности истощаются, они переходят друг в друга. Где максимум положительного (ян), минимум отрицательного (инь). И наоборот. Это известный графический символ багуа. Однако, знание, что Дао вечно сокрыто и исчезающее - сюань не исчерпывает представлений о сущности концепта. Можно сказать о Дао, что это антимир. Сокровенность, которого противостоит внешней, видимой форме вещей. Только в Дао, свободном от бытия, заключается исток жизни. Поскольку Дао предбытие и преднебытие, оно велико и разумно. Именно Дао классифицирует все вещи, рождает мозаичность и яркость мира. Это легло в основу важнейшей эстетической концепции Китая. Осязаемый чувствами мир реален, но за ним кроется еще более реальный мир Дао. Мир как бы распадается на две противоположности - внутреннюю и внешнюю, причем внутреннее начало более ценное, чем внешнее, так как именно оно позволяет видеть Дао. Таким образом, основными признаками присутствия Дао в реальном мире были всепроницающее небытие, всемогущее бездействие, всепорождающая сила единого, поддержка переходящего, получаемая из мира по ту сторону добра и зла. Дальнейшая китайская философская традиция мало что добавила к пониманию Дао. Конфуций перенес мистический термин в мир реального бытия. Он утверждал, что Дао проявляет себя в мире людей только через Дэ- свойственную человеку добродетель, или способность к совершенству. Человек обретает свою человеческую подлинность, когда его стихийные порывы под воздействием дэ принимают определенную форму.

Мы рассмотрели лишь некоторую особенность концепта Дао, которая бесспорно не исчерпывается этим содержанием. Ведь не зря трактат «Дао де Цзин» называли даже современники пятью тысячами иероглифов молчания. Даосизм так и остался до конца не понятым элитарным учением. История Лао Цзы и его сочинения печальна, но, в некоторой степени закономерна. Поздние даосы увидели в трактате «Дао де Цзин» только обоснование своих алхимических и эзотерических опытов для достижения личного бессмертия. Конфуцианство как более практичное и жизненное учение сумело обрести больше поклонников среди китайской элиты, а глубочайшее в своих метафизических исканиях учение даосов опустилось, до уровня практик. Несмотря на это даосизм продолжает жить, оставаясь неотемлимой частью духовной культуры Кита.

Недавно задумался о том, чем отличаются паттерны, позволяющие абстрагироваться от работы с хранилищем данных. Много раз поверхностно читал описания и различные реализации DAO и Repository, даже применял их в своих проектах, видимо, до конца не понимая концептуальных отличий. Решил разобраться, закопался в Google и нашел статью, которая для меня разъяснила все. Подумал, что неплохо было бы перевести ее на русский. Оригинал для англочитающих . Остальным интересующимся добро пожаловать под кат.

Data Access Object (DAO) - широко распространенный паттерн для сохранения объектов бизнес-области в базе данных. В самом широком смысле, DAO - это класс, содержащий CRUD методы для конкретной сущности.
Предположим, что у нас имеется сущность Account, представленная следующим классом:
package com.thinkinginobjects.domainobject; public class Account { private String userName; private String firstName; private String lastName; private String email; private int age; public boolean hasUseName(String desiredUserName) { return this.userName.equals(desiredUserName); } public boolean ageBetween(int minAge, int maxAge) { return age >= minAge && age <= maxAge; } }
Создадим интерфейс DAO для данной сущности:
package com.thinkinginobjects.dao; import com.thinkinginobjects.domainobject.Account; public interface AccountDAO { Account get(String userName); void create(Account account); void update(Account account); void delete(String userName); }
Интрефейс AccountDAO может иметь множество реализаций, которые могут использовать различные ORM фреймворки или прямые SQL-запросы к базе данных.
Паттерн имеет следующие преимущества:

  • Отделяет бизнес-логику, использующую данный паттерн, от механизмов сохранения данных и используемых ими API;
  • Сигнатуры методов интерфейса независимы от содержимого класса Account. Если вы добавите поле telephoneNumber в класс Account, не будет необходимости во внесении изменений в AccountDAO или использующих его классах.
Тем не менее, паттерн оставляет множество вопросов без ответа. Что если нам необходимо получить список аккаунтов с определенным lastName? Можно ли добавить метод, который обновляет только поле email для аккаунта? Что делать, если мы захотим использовать long id вместо userName в качестве идентификатора? Что именно является обязанностью DAO?
Проблема заключается в том, что обязанности DAO не описаны четко. Большая часть людей представляет DAO некими вратами к базе данных и добавляет в него методы как только находит новый способ, которым они хотели бы общаться с базой данных. Поэтому нередко можно увидеть DAO, раздутый как в следующем примере:
package com.thinkinginobjects.dao; import java.util.List; import com.thinkinginobjects.domainobject.Account; public interface BloatAccountDAO { Account get(String userName); void create(Account account); void update(Account account); void delete(String userName); List getAccountByLastName(String lastName); List getAccountByAgeRange(int minAge, int maxAge); void updateEmailAddress(String userName, String newEmailAddress); void updateFullName(String userName, String firstName, String lastName); }
В BloatAccountDAO мы добавили методы для поиска аккаунтов по различных параметрам. Если бы в классе Account было больше полей и больше различных способов построения запросов, мы могли бы получить еще более раздутый DAO. Следствием чего стало бы:
  • Сложнее создавать моки для интерфейса DAO во время юнит-тестирования. Необходимо было бы реализовывать больше методов DAO даже в тех тестовых сценариях, когда они не используются;
  • Интерфейс DAO становится все более привязанным к полям класса Account. Возникает необходимость в изменении интрфейса и его реализаций при изменении типов полей класса Account.
Чтобы сгустить краски еще сильнее, мы добавили дополнительные методы обновления в DAO. Они являются непосредственным результатом появления двух новых сценариев использования, которые обновляют различные наборы полей аккаунта. Они выглядят как невинная оптимизация и отлично укладываются в концепцию AccountDAO в том случае, если мы рассматриваем интрфейс как врата к хранилищу данных. Паттерн DAO и название класса AccountDAO определены слишком расплывчато чтобы отвратить нас от этого шага.
В итоге мы получили раздутый интерфейс DAO и, я уверен, мои коллеги добавят еще больше методов в будущем. Через год мы будем иметь класс с более чем 20 методами и проклинать себя за то, что выбрали этот паттерн.

Паттерн Repository

Лучшим решением будет использование паттерна Repository. Эрик Эванс дал точное описание в своей книге : «Repository представляет собой все объекты определенного типа в виде концептуального множества. Его поведение похоже на поведение коллекции, за исключением более развитых возможностей для построения запросов».
Вернемся назад и спроектируем AccountRepository в соответствии с данным определением:
package com.thinkinginobjects.repository; import java.util.List; import com.thinkinginobjects.domainobject.Account; public interface AccountRepository { void addAccount(Account account); void removeAccount(Account account); void updateAccount(Account account); // Think it as replace for set List query(AccountSpecification specification); }
Методы add и update выглядят идентично методам AccountDAO. Метод remove отличается от метода удаления, определенного в DAO тем, что принимает Account в качестве параметра вместо userName (идентификатора аккаунта). Представление репозитория как коллекции меняет его восприятие. Вы избегаете раскрытия типа идентификатора аккаунта репозиторию. Это сделает вашу жизнь легче в том случае, если вы захотите использовать long для идентрификации аккаунтов.
Если вы задумываетесь о контрактах методов add/remove/update, просто подумайте об абстрации коллекции. Если вы задумаетесь о добавлении еще одного метода update для репозитория, подумайте, имеет ли смысл добавлять еще один метод update для коллекции.
Однако, метод query является особенным. Я бы не ожидал увидеть такой метод в классе коллекции. Что он делает?
Репозиторий отличается от коллекции, если рассматривать возможности для построения запросов. Имея коллекцию объектов в памяти, довольно просто перебрать все ее элементы и найти интересующий нас экземпляр. Репозиторий работает с большим набором объектов, чаще всего, находящихся вне оперативной памяти в момент выполнения запроса. Нецелесообразно загружать все аккаунты в память, если нам необходим один конкретный пользователь. Вместо этого, мы передаем репозиторию критерий, с помощью которого он сможет найти один или несколько объектов. Репозиторий может сгенерировать SQL запрос в том случае, если он использует базу данных в качестве бекэнда, или он может найти необходимый объект перебором, если используется коллекция в памяти.
Одна из часто используемых реализаций критерия - паттерн Specification (далее спецификация). Спецификация - это простой предикат, который принимает объект бизнес-области и возвращает boolean:
package com.thinkinginobjects.repository; import com.thinkinginobjects.domainobject.Account; public interface AccountSpecification { boolean specified(Account account); }
Итак, мы можем создавать реализации для каждого способа выполнения запросов к AccountRepository.
Обычная спецификация хорошо работает для репозитория в памяти, но не может быть использована с базой данных из-за неэффективности.
Для AccountRepository, работающего с SQL базой данных, спецификации необходимо реализовать интерфейс SqlSpecification:
package com.thinkinginobjects.repository; public interface SqlSpecification { String toSqlClauses(); }
Репозиторий, использующий базу данных в качестве бекэнда, может использовать данный интерфейс для получения параметров SQL запроса. Если бы в качестве бекэнда для репозитория использовался Hibernate, мы бы использовали интерфейс HibernateSpecification, который генерирует Criteria.
SQL- и Hibernate-репозитории не используется метод specified. Тем не менее, мы находим наличие реализации данного метода во всех классах преимуществом, т.к. таким образом мы сможем использовать заглушку для AccountRepository в тестовых целях а также в кеширующей реализации репозитория перед тем, как запрос будет направлен непосредственно к бекэнду.
Мы даже можем сделать еще один шаг и использовать композицию Spicification с ConjunctionSpecification и DisjunctionSpecification для выполнения более сложных запросов. Нам кажется, что данный вопрос выходит за рамки статьи. Заинтересованный читатель может найти подробности и примеры в книге Эванса.
package com.thinkinginobjects.specification; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Restrictions; import com.thinkinginobjects.domainobject.Account; import com.thinkinginobjects.repository.AccountSpecification; import com.thinkinginobjects.repository.HibernateSpecification; public class AccountSpecificationByUserName implements AccountSpecification, HibernateSpecification { private String desiredUserName; public AccountSpecificationByUserName(String desiredUserName) { super(); this.desiredUserName = desiredUserName; } @Override public boolean specified(Account account) { return account.hasUseName(desiredUserName); } @Override public Criterion toCriteria() { return Restrictions.eq("userName", desiredUserName); } }

Package com.thinkinginobjects.specification; import com.thinkinginobjects.domainobject.Account; import com.thinkinginobjects.repository.AccountSpecification; import com.thinkinginobjects.repository.SqlSpecification; public class AccountSpecificationByAgeRange implements AccountSpecification, SqlSpecification{ private int minAge; private int maxAge; public AccountSpecificationByAgeRange(int minAge, int maxAge) { super(); this.minAge = minAge; this.maxAge = maxAge; } @Override public boolean specified(Account account) { return account.ageBetween(minAge, maxAge); } @Override public String toSqlClauses() { return String.format("age between %s and %s", minAge, maxAge); } }

Заключение

Паттерн DAO предоставляет размытое описание контракта. Используя его, выполучаете потенциально неверно используемые и раздутые реализации классов. Паттерн Репозиторий использует метафору коллекции, которая дает нам жесткий контракт и делает понимание вашего кода проще.

Теги: Добавить метки



Включайся в дискуссию
Читайте также
Как правильно делать укол собаке
Шарапово, сортировочный центр: где это, описание, функции
Надежность - степень согласованности результатов, получаемых при многократном применении методики измерения