Схема за изграждане на корпоративни приложения,
Изграждане на предприятието-приложения
Когато за първи път се сблъскват с концепцията за "Предприятие-молба" или "молба в предприятието", той обикновено не е достатъчно, че ти каза, като програмист. Предполагам, че причината за проблема е, че тя се вкарва в употреба не-програмисти и маркетинг или продавачи, които често не общуват с разработчици и бизнес лидери. Малко вероятно е, че те ще ви отговорим на въпроса "Защо JSP или Servlet отнася до Java Enterprise Edition, а не на Java Standard Edition?». Както можете да видите, нищо лошо в уеб-базиран не. Малко вероятно е, че те са много по-сложно от една и съща люлка. Но тук ние сме разделени. Имаше всякакви рамка, които наистина помагат за решаване на задачи на корпоративно ниво. И така, какво е толкова специалното на-корпоративни приложения. На този въпрос ще се опитам да отговоря в тази глава. Може би някой не е съгласен с моето мнение, но за мен това е важно да се разбере, че всяка технология е предназначена за решаване на някои видове проблеми. Ако тя решава задачите си добре, а след това е необходимо. Ако не - "в нея печка", както той би казал професор по Преображение.
Ако анализираме правилата на строителни корпоративни приложения, ние можем съвсем ясно да разбере какво може да се твърди, библиотеки и технологии. И те могат дори да предвидят по някакъв начин - това може да отнеме повече. За дълго да се разпространява идеята за дървото, нека разгледаме схемата на изграждане Enterpise-приложение (в бъдеще аз просто ще кажа "приложение"). Аз няма да кажа, че това е безспорно, но в моя опит в съответствие с него, подходящ за почти всички проекти, в които участвах. Да, като цяло, а не много по-различно от съветите на професионалистите. Ако ние считаме, спецификацията на Java EE, идеите, които се съдържат в него ще бъдат 90% припокриване с моята рисунка.
Защо така, а не иначе?
Участие повече от една година (но може би и повече от десет години) в създаването на корпоративни системи Дойдох, за да общо описание на това как тя трябва да работи за корпоративни приложения. Тя е много проста: потребителят изпраща команда с параметри, с данните, че нещо се случва, и в резултат на което потребителят получава отговор във формата, някои параметри, които се показват на екрана по някакъв начин. Мисля, че това разбиране е довело до появата на SOA - Service Oriented Architecture (SOA - Service Oriented Architecture). Това е просто едно ново ниво на разбиране на същия проблем: потребителят изпраща заявка - системата прави нещо с тези данни и извежда резултат. Какво е донесъл в една система на SOA за изграждане на технология - това е разбирането, че услуги за много единици могат да бъдат едни и същи, и поради това, че няма смисъл да ги умножи. И ние трябва да има механизъм, който ще направи по-лесно да се свърже вече съществуващи услуги. Всяка такава услуга може да се прилага на същия принцип като този на цялото приложение като цяло, а именно - разделена на същите нива. Всички тези нива на тази архитектура просто улесняват развитието и поддръжката на приложения. За потребителя да получи онова, което иска да разбере какво трябва да се вземат по-ясно стъпки. И най-важното - това е лесно да се вземе предвид спецификата на Enterprise. А за тези приложения, характеризиращи се със следния текст:
Въз основа на тези обещания, можем да кажем, че заявлението трябва да използват много сложни методи за съхранение, обработка и отчитане. И както обикновено, когато има търсене, има предложение - и това е повече от една дузина пакети и технологии. И по-ясно ще бъде в състояние да разберем проблема, толкова по-широк кръг от познати технологии, толкова по-голям броят на опаковките ще бъдат запознати с, по-бързо ще реши проблемите на клиента, а оттам и по-висока вас стойност като професионален.
Enterprise-схема на строителни приложения
![Схема за изграждане на предприятие-приложение (предприятие заявка) Схема за изграждане на корпоративни приложения,](https://webp.images-on-off.com/25/348/434x393_bhykm3uymd0tkajr0z5z.webp)
Единствената уговорка: тази схема е предназначена за изграждане на системи без да се използва основният компонент на SOA - ESB (Enterprise Service Bus). Ако използвате SOA, схемата няма да изглежда точно, но това е "много по-различна история." Въпреки, че някаква част от тази схема може да се използва както в случая на SOA.
ниво на съхранение - Устойчивост Layer и DataSource
Bunch DataSource и Устойчивост Layer е проектиран да работи с данните. Освен това, данните, както е показано на фигурата, могат да се съхраняват не само в базата данни. Тя може да бъде XML-файл или текстов файл. Това може да бъде сървър за електронна поща. Или Excel-файл. Като цяло, той може да бъде всичко, което желаете - толкова дълго, колкото е възможно по-устойчиво съхранение.
С цел да бъде в състояние да се абстрахират от даден магазин на данни се използва такова нещо като източника на данни - източника на данни, което се крие обикновено нещо повече или по-малко осезаем - специална база данни, файл, или нещо друго. Datasource Понятието служи ролята на мост между Устойчивост слой и действителната съхранение. В действителност, има дори специален клас - javax.sql.DataSource. Той клауза се използва за sodaniya връзка с базата данни - прочетете за него, че има смисъл. Но в допълнение към това "абстракция" има един много важен проект модел - обект на достъпа до данни (DAO). Външният му вид се дължи на няколко причини:
- Източници на данни могат да бъдат различни.
- За достъп до пряко свързани с конкретния свод може да използва различни API
- Включването в код логиката, която ограничава съхраняването на смени не е добра идея.
Как тогава DAO помага решаването на тези проблеми. Основната идея - да се определи Бизнес Layer интерфейс, че може да се използва за достъп до данните. И в непосредствена изпълнението на този интерфейс ще зависи от магазина.
![Схема за изграждане на предприятие-приложение (Обект връзка Mapping) Схема за изграждане на корпоративни приложения,](https://webp.images-on-off.com/25/348/434x337_nu8d9mv8ctq5tij68qu6.webp)
ORM - Object връзка картографиране. Предупреждавам ви веднъж - аз няма да разглежда случаи на използването на всеки друг склад, но релационни бази данни. Но дори и в този случай, данните трябва да бъдат получени от хранилището и са представени във вид, който е удобен за използване. Вече има доста дълго време, терминът ORM - Връзка Object картографиране. Бих го преведе като "обектно-релационни картографиране маси." Въпреки, че първоначално думата "маса" и не се случи, но би било по-точно отразява смисъла. Той се отнася до технологии, които са на ниво приложение ни позволи да се помисли за записи в таблиците като обекти. Всеки ред в таблицата - е обект. Само на този клас имоти, се показват в колоната в таблицата. Тези класове се наричат Entity - Essence. Между другото, ние сме почти се доближават до това - ние въведохме клас "група" и "Студентски", което, всъщност, изпълняват една много проста функция - за съхранение на данни от една маса. Тези системи поемат доста досадни, но това е също много важни функции - функция изпълнява CRUD (създават, четат, актуализиране, изтриване).
Вие не трябва да се напише един и същи вид на код, когато се постави нов рекорд или при получаване на данни от таблицата - може би си спомняте, ние написахме SQL-заявки с параметри, пише кода за попълване параметри в SQL-заявка, пише кода за съхранение на данни, получени от ResultSetv колекция от предмети определен тип. Съвсем естествено, това неудобство е наблюдавана в продължение на дълъг период от време и са били направени опити да се опрости по някакъв начин. Така че имаше някои, рамка, която вече сте чували. Тук са най-известните:
- спя зимен сън
- TopLink
- СПА - Java Persistence API
- Обект Java данни - JDO
- iBatis
Нивото на бизнес логика - Бизнес Layer
На това ниво, от една страна, тя е много проста, а от друга страна - това е трудно. Само защото си идея и функционалност е наистина много проста - тя изпълнява обработка на данни в съответствие с определена логика - промени, добавя, извлича. И нищо друго. От друга страна, има няколко трудности. Първо - това е необходимо да се организира работата с данни под формата на цялата транзакция (Надявам се, че това е, нали знаете). И второ - системата може да бъде сложна йерархия от класове, които трябва да бъдат определени (инициализиране), който също не винаги е тривиална задача.
Първият проблем може да бъде решен по няколко начина достатъчно добре:
- EJB - Enterprise Java Beans. В действителност, всеки клас (метод), който изпълнява някои действия могат да бъдат причислени към сделката, която управлява сървър на приложения (не забравяйте, че сървъра на приложения трябва да поддържа работата с EJB). Тя започва при въвеждане на метода, и завършва на изхода на метода. Най-новата версия на EJB 3.0 (отново, ако сървърът поддържа тази) се справя с възложените му задачи, доста добре. получава.
- Много честен, за да започне една сделка и да се изравнят резултата на SQL-заявки. Това със сигурност е по-добре да не се използва - от гората няма да видите дърветата. Някои облекчение работа е да се използват аспекти. Основната идея на аспекта - е един вид код вмъкване на различни места в програмата. Например, можете да определите някои набор от методи и определи действията за тях в началото и в края. И тогава, когато се обадите на метода първо ще се извърши аспект код и едва след това на самия метод. Повече подробности можете да намерите - Aspect-ориентирано програмиране
- Използвайте рамка пролет. Той съдържа възможност за работа с различни видове сделки - обичайната JDBC-транзакция, за хибернация, TopLink, и дори да използвате сделката за Application Server. Работата е наистина удобно, и това е много хубаво, не изисква Application Server - можете да работите с обичайната Tomcat уеб сървър. Какво е важно да се отбележи, за изпълнението на тази пролет използва ЗНП, която има
инициализация проблем може да бъде решен чрез използване на концепция IOC (инверсия на контрол). Най-често, като основният принцип се нарича "Холивуд принцип" - "не ми се обади, аз ще ти се обадя." С други думи - да положи проблем инициализация отношения между класовете в рамките, вместо писане кода на инициализация, където това е необходимо. За да се реши този проблем има много рамка, но аз сега са идентифицирани две:
В допълнение към все още искал да подчертая - имайте предвид, че между слоя Устойчивост и бизнес слой, се минава на юридическото лице, както и на други нива (нива ПИ) BusinessLayer изпраща / получава View.
Първо - това е удобно. UI трябва да се има предвид, че тя ще се появи. И за да покаже, че не винаги е точната структура на отношенията между предприятието. Така че ще трябва да мисля за това - следователно по-лесно да се осигури незабавно такава възможност. То може да бъде, че някои от най-View ще бъде на структурата дори съвпада с обектите. Но по-често това не се случи.
Второ - преди известно време, моите приятели, бързо създават уеб-Сервизните центрове на класовата структура, която даде на предприятието. NetBeans честно Генериране пълно описание клас. И тогава се натъкнаха неприятно откритие. Фактът, че предприятието не винаги попълнете всички наведнъж. Има такова нещо като мързелив инициализация (късна инициализация). Тази техника се използва често, когато не е нужно всички полета на юридическото лице веднага. Тя е само, когато ще се изисква тези данни - е заявка за база данни. Но искането може да бъде само, когато имате отворена операция. По време на сделката се представя за бизнес слой, превръщането на данни за предаване на Web-услуги, извършени по-късно - и, че има проблем. От една страна той иска да Entity "doinitsializirovatsya" най-накрая, а сделката вече е затворен. грешка изпълнение се случи. Неудобно.
Има и друг момент, който добавя тегло да използвате View - стандартни методи за предаване чрез HTTP параметри (виж по-долу «уеб-клиент» раздел.). За да се превърне от класовете на Java до известна текстово представяне на размисъл често се използва механизъм (възможността за получаване на информация за този клас - неговите полета, методи и т.н.). Така че при конвертиране пакети, получаване на клас, като се опитва да се направи на всички негови области. Ако някоя област се отнася до друг обект, пакетът се опитва да получи достъп до всички сфери на обекта. И така нататък до безкрайност. Може би вече сте предположили какво може да се изправи, ако два обекта се отнасят един към друг. Или, като цяло, има някои затворени съоръжения верига. Такава трансформация просто влиза безкраен цикъл. Това със сигурност е възможно да се напише всеки път, когато си конвертор. Но не по-просто да се напише клас за изгледа.
Поради тези причини и завои - това е удобно да се направи отделни класове за издаване на нивото на UI
ниво за обработка на HTTP заявка - Web Layer
По някаква причина на това ниво често възлагат за управление на бизнес логика - особено за сървлети. По мое мнение, това не е съвсем вярно.
На първо място - смесено преобразуване на данните в логиката - всички техники, за да се съберат в една купчина и правят боклук. И вие ще трябва да го направя - защото не дойде на Java обекти и обичайната HTTP. Да, разбира се, има начини да го автоматизират, но въпреки това тя ще изглежда ужасно.
Второ - кой ти каза, че ще има само уеб-клиентите? И ако това е уеб-Сервизните центрове за демони или конвенционални "дебели» GUI-клиенти, които могат да комуникират с прилагането на RMI или през един и същ уеб-услугите. Вие ще предизвика логиката на сървлета? По принцип е възможно, но е ясно увеличи "pomoechnye" кода си.
Ето защо, роден да повери уеб нива по простата задача на преобразуване на данните между HTTP и Java. Единственото нещо, което все още можете да лежеше на уеб-високо ниво - това е логиката на промяната на екрани. Същият дизайн модел MVC (Model-View-Controller). Но това не е много силна връзка с него бизнес логика. По отношение на технологията и рамка, която може да се използва на това ниво, че те са много:
- JSP + JSTL
- JSF
- Struts
- пружина
- и още много други - е трудно да се изброят
WS клиент (Web-Service клиент)
Като цяло, тук особено много да се говори за - ще ви Серве използвате дистанционното програма - толкова хубаво. Предимства и недостатъци на тази технология, можете да търсите в интернет. Когато описваме пример за създаването на такъв клиент - ние ще засегна накратко върху тези въпроси.
GUI клиент
Тук всичко е съвсем очевидно, че с изключение на комуникационния протокол между сървъра на приложения и клиентът може да повдигне въпроси, но обикновено това е RMI. Що за директна продажба на графичния потребителски интерфейс, тук изборът е ваш. По мое мнение, Swing ви дава много. В допълнение, има SWT и морето на различни компоненти. Потърсете в интернет.
Като цяло, никой не притеснява осъзнаете чрез заявление клиент-сървър с дебел клиент и базата данни. Но въпросът, която представихме много накратко в първата част. Така че очаквайте там и в интернет.
Web-клиент
Днес той е един от най-популярните решения - но, че ще използвате, за да се изгради - и тук изборът е достатъчно голям. Ясно е, че ако искате потребителския интерфейс е красива и модерна, тя ще се използва AJAX. Разбира се, че също трябва да използвате някакъв вид библиотека. Какво да изберете - вие решавате:
- ExtJS
- JQuery
- Доджо
- GWT
- JSF - RichFaces, IceFaces, MyFaces
- и отново много по-
Какво щях да сте забелязали, в този раздел - така че това е една система за предаване на данни от клиента към сървъра и обратно. Вие всъщност ще използва HTTP, но не и на Java обекти. Ето днес изборът не е много голям:
По принцип, това е всичко, което исках да кажа в тази глава. По-нататък ще се направи по-сложна схема на нашия отдел персонал - за да стане по-интересно. Можете да започнете - Част 15 - новата структура на данните.