Достъпът до данните обект (дао)

Data Object Access (DAO). ниво клас -6

  • 10.07.15 07:05 •
  • combinezon •
  • • # 262243
  • • Habrahabr
  • 8 •
  • 3474

- като Forbes, само по-добре.

При проектирането на информационната система идентифицира някои слоеве, които са отговорни за взаимодействието на различните модули на системата. А връзка с базата данни е един от най-важният компонент на заявлението. Винаги подчерта част от код модула, otvechayuschayuschy за предаване на искания до базата данни и обработката на получените отговори от нея. По принцип, определянето на Object Access Data го описва като слой между базата данни и системата. DAO извлича същността на системата и ги прави картиране на база данни, определя общите методи за използване на съединението, неговата подготовка, затваряне и (или) завръщането в Connection Pool.

Vertex йерархия DAO е абстрактен клас или интерфейс с описанието на общите методи, които се използват при взаимодействието с базата данни. Като правило, този метод за търсене, отстраняване на ключа, обновяване и т.н.


Набор от методи не е пълен, това зависи от конкретната система. Фиктивни тип K е ключов същността, редки таблица, описваща предприятието няма първичен ключ. Точно в този клас би било логично да се поставят на метода на затваряне на инстанция PrepareStatement.

Нивото на класа


DAO Изпълнение клас ниво предполага използването на един-единствен разговор, връзка за повече от един метод DAO наследен клас. В този случай, в горната част на йерархията на DAO AbstractController. като областта е обявена за връзка. Абстрактен клас е както следва.


Трябва да се отбележи, че в този пример, ние получаваме една инстанция Connection от група от връзки, които обикновено означава да се направи или да използвате готови решения. Създаване на методи за получаване на getPrepareStatement (String SQL) и неговото закриване closePrepareStatement (PreparedStatement к.с.). Изпълнение на специфични DAO клас, с една и съща логика, никога не трябва да бъде в близост до техния начин на свързване към базата данни. Връзката се затваря в тази част на бизнес логиката, от която беше извикан метода. Един пример за конкретна DAO клас ще изглежда така.


Свързване съд на разположение метод getPrepareStatement (String SQL). което от своя страна е на разположение на всеки конкретен метод за DAO клас. Трябва да се помни, че е необходимо да се затвори PrepareStatement например когато най-накрая работи в блока, и се върнете към басейн съединение returnConnectionInPool на () в логиката на системата, където методът се нарича.


PreparedStatement там, за да не губите време за съставянето всеки път, съответно, създавайки го всеки път, когато диво разгражда производителност, създайте го в конструктора и да го съхранява в PreparedStatement клас компилиран.

connectionPool = ConnectionPool.getConnectionPool ();
Статичното метод връща connectionPool? Много лоша идея, така че тестването става много трудно. и класовете плътно свързани, е по-добре да го предаде като параметър на конструктора или дори чрез Зависимост инжектиране.


Няма нужда да пиша добре, ако има изключение prokinut тя трябва да бъде по-голямо или най-малко zalogirovat (но да си изключение, и то по-нататък prokinut много по-добре). Разбираемо е, че примерът, но не преподават лошо ...

обществен Булева изтриете (Integer ID)
Булева създаде (Planet лице)

С цел проверка, всичко е в ред в Java е много по-добре да се използва хвърляне по изключение, върнете булевият от тези методи обикновено е лоша идея по много причини, не на последно място, защото ще спам код, който използва вашия клас безсмислени проверки, след всяко извикване на функция и не позволяват да използвате всички силата на изключение.


Ако методът все още не е готов да се хвърли по-добре по-добре нерегистриран изключение, като UnsupportedOperationException.

Винаги използвайте ArrayList (Ozhidaemyy_razmer_kollektsii) вместо LinkedList да създадете списък, от Oracla момчета, участващи изпълнение JVM каза, че LinkedList изпълнение на практика винаги е по-лошо от ArrayList.

Тези, които поставят по-малко може да обясни какво е това по-горе не сте съгласни? Аз наистина се чудя, може ли да знаете повече за LinkedList ...