Open Space Lands Главная |

Виетнам по компютърни науки

Виетнам по компютърни науки (Преди две години в Microsoft, TechEd в Сан Диего, аз е замесен на разговор на след-конференция събитие с Хари Пиърсън и Клеменс Вастерс, и както е типично, когато трима от нас получавате заедно, архитектурни теми бяха в челните редици на нашите дискусии. тълпата се събраха около нас, и тя се превърна в импровизирана птици-на-а-перо сесия. предмет на технологии за картографиране на обект / релационна дойде и тя беше там и след това, че за първи път въведе израза "обект / релационни картографиране е във Виетнам по компютърни науки ". в междинния време съм получила многобройни искания до плът от дискусията зад това твърдение, и като се има предвид неотдавнашното изявление на Microsoft по отношение на" субект поддръжка "в ADO.NET 3.0 и приемането на Java Persistence API като заместител за двете предприятието Фасул EJB и JDO, изглежда, да направят точно това.) Не въоръжен конфликт в историята на САЩ преследва американските военни над $g(Vietnam). Толкова много различни елементи обединяват, за да създадат най-решаваща повратна точка в съвременната американска история, че се поддава на опит всеки мирянин, за да ги дразни, освен. И все пак, историята на Виетнам е фундаментално проста: САЩ започва военна проект с прости, но неясни и противоречиви цели, и бързо се превърна въвлечен в тресавище, че не само две правителства (един от правна гледна точка, чрез силата на ръце), но също така дълбоко белязан американската военна доктрина за следващите четири десетилетия (най-малко). Въпреки че може да изглежда банално да го кажа, $g(Object/Relational Mapping) е във Виетнам по компютърни науки. Той представлява блато, което започва добре, става по-сложно, тъй като с течение на времето, и не след дълго улавя своите потребители в ангажимент, че няма ясна демаркационна точка, няма ясни условия за победа, и няма ясна стратегия за излизане от кризата. История PBS има добър обзор на войната, но за тези, които са по-заинтересовани по компютърни науки от Политически / Военно-исторически, кратка версия върви по този начин: $g(South Indochina), сега известна като Виетнам, Тайланд, Лаос и Камбоджа, има дълга история на борба за автономия. Преди френското колониално господство (която започна в средата на 1800 г.), Южна Индокитай се бори за регионално независимост от Китай. По време на Втората световна война, японците завладяват района, само за да бъде по-късно "освободена" от съюзниците, което води на Франция да възобновят колониално господство (както британците в техните колониални територии на други места в Азия и Индия). След Втората световна война обаче, хората на Южна Индокитай, изхвърлен от насилника, разшири си срещу окупацията на усилията за борба с френски вместо на японската, и през 1954 г. на френския капитулира, подписвайки $ грама (Женева мирно споразумение) официално да за отпускане на безвъзмездни средства Виетнам нейната независимост. За съжаление, глобалните натиск извратен усилията известна степен, и вместо на трайно мирно споразумение временно решение е създаден, раздели нацията на 17-ия паралел, създаване на две нации, където преди не съществува такова разделение. Избори да се проведат през 1956 г. за обединяване на страната, но САЩ се опасяват, че прекалено много власт ще бъде дадена на $ грама (Комунистическата партия на Виетнам), чрез тези избори, и вместо подкрепена борбата с комунистическата държава на юг от 17-ти паралел и формира редица многостранни споразумения около него, като $ грама (SEATO). Нова нация от $ грама (Южен Виетнам) е роден, и първата (съмнително) избран за лидер е $ грама (Нго Дин Дием), твърдо анти-комунист, който почти веднага обяви, че страната му под комунистическо атака. $ Грама (Айзенхауер администрация) остана в подкрепа на правителството Diem, но лоялност Diem с хората е почти несъществуваща от самото начало. По времето на Демократическата партия на САЩ $ грама (John F Kennedy) дойде в Белия дом, нещата идват до главата в Южен Виетнам. Кенеди изпрати екип за Виетнам, за да проучат условията там и да формулира стратегията си по въпроса. В какво е сега известен като "$ грама (декември 1961 г. Бяла книга)", един аргумент за увеличаване военна, техническа и икономическа помощ е представен, заедно с мащабни американски "съветници" за стабилизиране на Diem правителство и премахване на $ G (Национален фронт за освобождение), наречен $ грама (Виет Конг) от САЩ. Това, което не е толкова широко известно, обаче, е, че редица от съветници на Кенеди възрази срещу това натрупване, наричайки Виетнам "задънена алея". Сблъсквайки се с две диаметрално противоположни пътеки, Кенеди, както е типично за неговата администрация, избра средния път: вместо масивна ангажимент или пълно изтегляне, Кенеди вместо това избра да търсят ограничен селище, изпращане на помощ, но не голям брой войници, пътя, който е почти обречена от самото начало. Чрез серия от стратегически грешки, включително принудително преместване на селските селяни (известен като $ грама (Стратегическа програма за Хамлет)), подкрепа Diem е толкова дълбоко ерозирали, че Кенеди колебливо и несигурно се поддържа военен преврат, по време на който бе убит Diem. Три седмици по-късно Кенеди е убит, хвърляне на вътрешния политическата сцена на САЩ в смут, както и. По ирония на съдбата, началото на конфликта от Кенеди в действителност би по-късно да бъдат свързани най-тясно сътрудничество с неговия заместник. Джонсън война По време на убийството на Кенеди, Виетнам има 16 000 американски съветници на място, повечето от които не са участвали в ежедневните операции борба. Кенеди вицепрезидент и нова замяна, обаче, $ грама (Линдън Бейнс Джонсън), не е убеден, че този път води към успеха, и започна да вярва, че е необходима по-агресивни действия. Залавянето на съмнителен инцидент, в който виетнамски патрулни катери атакуваха американски destroyers1 в $ грама (залива Тонкин), Джонсън войната настроения в Конгреса да приеме резолюция, която му даде правомощия за провеждане на военни действия без изричното обявяване на война. Да го кажем просто, Джонсън искаше да водим тази война "хладнокръвно": "Това означава, че Америка ще тръгне на война във Виетнам с прецизността на хирург с малко забележимо въздействие върху вътрешното култура ограничена война, наречена за ограничен мобилизация на. ресурси, материали и човешки, и е причинил най-малко притеснения във всекидневния живот в Америка. " (Източник) По същество, това ще бъде война, чиято единствена въздействие ще се усети от виетнамското - американския живот и обществото ще продължи без предизвестие на събитията във Виетнам, като по този начин оставя Джонсън да преследва първата си голяма любов, неговата " Великото общество ", вътрешен план, чиято цел да се определи много от злините на американското общество, като poverty2. История, разбира се, знае по-добре и може би жестоко нарича "война Джонсън" на конфликта във Виетнам. Първоначално, тя трябва да се отбележи, че Виетнам бедствия е по-скорошно възприятие, американците анкетираните като едва през 1967 са били убедени, че войната е нещо добро, че комунизмът трябва да бъде спряно и че Виетнам, трябва да падне, ще бъде първата от поредицата на народите да се поддаде на комунистическата подривна дейност. Това "$ грама (Domino теория)" е общ рефрен за американската политика през втората половина на 20 век. Опасенията от този вид порази американската външна политика, откакто комунистите успешно или почти успешно извратил няколко европейски правителства по време на HTE втората половина на 1940-те години, а след това в Китай през 50-те години. (Трябва да се отбележи, че Айзенхауер и $ грама (Джон Фостър Дълес), формулаторите на теорията, никога не включва Виетнам през пръстен на домино, които трябва да бъдат запазени, и в действителност Айзенхауер беше учудващо апатични за Виетнам по време на някои от срещите си с Кенеди по време на прехода в Белия дом). През 1968 г., обаче, опитът Виетнам обърна значително, като Северен Виетнам и Виет Конг стартира $ грама (Tet Offensive), кампания, която постави да лежи на уверенията на американското правителство, че спечелването на войната във Виетнам. По ирония на съдбата, както е в случая голяма част от войната, NVA / VC сили са загубили значителен брой войски, много повече от американските си опоненти, но офанзивата Тет е смятана от историците да бъде точката на пречупване на американската воля в на войната. След това, всеобщото мнение се обърна на Джонсън, и в драматична пресконференция той обяви, че той няма да се кандидатира за преизбиране. Освен това, той обяви, че ще се стреми към договаряне споразумение с виетнамците. Никсън обещанка За съжаление, американската позиция за преговори е сериозно отслабена от самите протести, които бяха донесли американците на масата за преговори на първо място; NVA / VC ръководството признават, че NVA / VC сили, въпреки потресаващите военни загуби, които едва не ги счупи (няколко пъти) , може просто да продължим да правим, тъй като те са прави, и извива отстъпки от американците, без да предлага в замяна. Работи на една платформа, която се състои най-вече с обещанието да "Вземи Америка, Виетнам", наследник на Джонсън, републиканец $ грама (Ричард Никсън), опитах няколко тактики да донесе налягане на NVA / VC сили да се пазариш, включително увеличава въздух-борба присъствие (като $ грама (коледни атентати) и $ грама (операция "Меню")) и редовни нарушения на близките Лаос и Камбоджа, продължаване на линията на доставките от Северен Виетнам клетки в Южен Виетнам. Нищо не работи, обаче, и през 1973 г. администрацията на Никсън подписа $ грама (Париж мирно споразумение), слагайки край на американското участие в този конфликт. Две години по-късно, Южен Виетнам е бил превишен, а на 30 април 1975 г., комунистическите сили превзеха Сайгон, столица на Виетнам, принуждавайки евакуацията на американското посолство и най-запомнящ се образ на войната, че на потоците от бягащи хора, които търсят място на хеликоптер Хюи, кацнала на покрива на посолството. Края на войната Втората Южен Индокитай война свърши, Америка преживя най-дълбоката поражение в своята история и Виетнам стана синоним на "блато". Влиянието му върху американската култура е неизмерима, както го научил цяло поколение американци техния страх и недоверие на правителството, научи американските лидери да се страхуват от размера на американските военни жертви, и фразата "ясна стратегия за излизане от кризата" директно в американската политическа лексика. Не и докато $ грама (Роналд Рейгън), използвани за американските военни, за да "освободи" малката островна нация от $ грама (Гренада) американска военна намеса ще се смята за възможен инструмент на дипломацията от американските президенти, и то само с голяма прецизност на вътрешното загриженост, като $ грама (Бил Клинтън) ще разберете по време на мироопазващи мисии до $ грама (Сомалия) и $ грама (Косово). В количествено отношение, също ефектите на Виетнам явно попада на целта на Джонсън на войната в "Хладнокръвно". Final данни: 3 милиона американци, служили във войната, 150 000 тежко ранени, 58 000 мъртви, а над 1000 MIA, да не говорим за близо един милион NVA / Viet Cong войски жертви, 250 000 Южен Виетнам жертви и стотици хиляди, ако не милиони , тъй като някои защитавани историци - на цивилни жертви. Уроците на Виетнам Виетнам представя интересен проблем на ученик на военна и политическа история - точно какво се е объркало, когато и къде? Очевидно е, че нежеланието на правителството на САЩ да признае провалите си по време на войната прави за един лесен изкупителна жертва, но не правителството в историята на съвременното общество е някога бил напълно честен с население за си съдбата на войната; един такъв пример включва (но не ограничени до) внимателни цензура същото правителство на САЩ на дейностите по време на Втората световна война, петдесет години по-рано, известен в американската история като "последно" добра "война". То също е изкушаващо да се отбележи липсата на военен обект, от решаващо значение при липса на Виетнам, но САЩ и други правителства са били успешно изпълнени от други невоенни цели без вид на колосален провал, придружаващи историята на Виетнам. Освен това е важно да обърнете внимание,, че САЩ е в действителност, има ясна цел в какво го искаше, на конфликта в Южен Индокитай: да спре падането на Южна правителството Виетнам, и, блокиране, че, спирането на " разпространението на комунизма. Беше нежеланието на правителството на САЩ за разгръщане на военните да си наличен потенциал, тъй като $ грама (Уилям Уестморланд) винаги е твърдяла? Разбира провала във Виетнам не е военен; произшествието цифри става ясно, че САЩ от всяка друга мярка, очевидно е печеливша. И така, какви са основните провали във Виетнам? И най-важното, какво означава всичко това трябва да направите с O / R Mapping? Виетнам и O/R картографиране В случай на Виетнам, САЩ политическия и военен апарат е бил изправен пред смъртоносна форма на $ грама (Закон за намаляващата възвръщаемост). В случай на автоматизирано Обект / релационна Mapping, това е същата загриженост, че ранните успехи дават ангажимент да използва O / RM в места, където успехът става все по-неуловим и с течение на времето, не е успех на всички дължими към въздушната на време и енергия, необходима, за да го подкрепят чрез всички възможни използват случаи. По същество, най-големият урок на Виетнам - за всяка група, политически или друг начин - е да знаете кога да "отсече стръв и бягай", като рибари казват. Твърде често, какъвто беше случаят във Виетнам, че е лесно да обосновават по-нататъшното инвестиране в конкретен курс на действие, като внушение, че отказът от този курс по някакъв начин обезсилва цялата работа - или, в случая с Виетнам, живота на американски войници, които вече са били платени. Фрази като "сме отишли толкова далеч, със сигурност можем да виждаме това нещо" и "да се оттегли сега е да изхвърлите всичко, което сме жертва до този момент" станала обичайно. Най-малко по време на по-късно, дълбоко горчиви години от втората половина на Виетнам, въпроси на патриотизма дойде под въпрос: ако не подкрепят войната, са били ясно предател, комунист, очевидно "unAmerican", неуважение към всички американски ветерани от всяка война воюва на всяка почва, за каквато и да е причина, и най-вероятно ритна кучето си да зареди. (Това не помогне на каузата на протестиращите, че те обвиниха войници за войната, който ги държи отговорни - понякога лично - за решенията, направени от военни и политически лидери, повечето от които нито войници, нито протестиращите бе срещал ) Признавайки, че всички аналогии не успеят в крайна сметка, и че предмет на Виетнам е по-дълбоко от това есе може да разгледа, все още има уроци, които трябва да бъдат научени тук в съвсем друга арена. На ключовите уроци на Виетнам е опасността какво е разговорно наричат "на Slippery Slope":, че на даден курс на действие може да доведе до някои ранен успех, още допълнително инвестиции в това действие се получава decreasingly съизмерими резултати и increasibly опасни препятствия, чиито само решение се появява да бъде по-голяма и по-голяма ангажираност на ресурси и / или действие. Някои наричат това "капана на наркотиците", след начина, по който фармацевтични продукти (законно или незаконно) могат да имат намален ефект след продължителна употреба, което изисква Увеличихме дозата, за да се получат същите резултати. Други наричат това "последен проблем Mile", че като един наближава края на проблем, става все по-трудно в отношение на разходите (парични, така и абстрактни), за да се намери 100% цялостно решение. Всички те са основно говорим за едно и също нещо - трудността за намиране на отговор, който позволява на нашия герой да "довърши" въпросният проблем, пълно и задоволително. Ние започваме анализ на Обект / релационна Mapping и връзката му с Втората Южен Индокитай война - чрез изследване на причините за него на първо място. Какво кара разработчиците от използването на традиционните релационни инструменти за релационна база данни, и да предпочитат вместо инструменти като O / R-М "? Обектно-релационни импеданс Разминаване Да се каже, че обекти и релационни комплекта данни са някак построени по различен начин обикновено не е изненада всеки разработчик, който е някога използва както; освен в изключително опростенчески ситуации, тя става доста очевидно, да признае, че на начин, в който е проектиран на релационна магазин данни е едва доловимо - и все пак дълбоко - различно от това как е проектиран обект система. Обекти системи обикновено се характеризира с четири основни компонента: идентичност, състояние, поведение и капсулиране. Идентичността е имплицитно понятието в повечето OO езици, в това, че даден обект има уникална идентичност, която се различава от неговото състояние (стойността на своите вътрешни полета) - два обекта с една и съща държава, все още са отделни обекти, въпреки че малко за битови огледала един на друг. Това е "идентичност срещу еквивалентност" дискусия, която се проявява в езици като C + +, C # или Java, където разработчиците трябва да се прави разлика между "== б" и "a.equals (б)". Поведението на даден обект е доста лесно да се види, събиране на операции, клиентите могат да се позоват, за да манипулират, да разгледа, или взаимодействат с обекти по някакъв начин. (Това е това, което различава предмети от пасивни структури от данни в процедурно език като C.) капсулиране е ключов детайл, предотвратяване на външни лица да манипулират вътрешни детайли обекти, като по този начин се осигурява еволюционни възможности за интерфейс на обекта, за да clients.3. От това можем да извлечем по-интересни концепции, като вид, официална декларация на обекта, състоянието и поведението, сдружение, което позволява на вида на референтните един с друг чрез лека препратка отколкото пълно с стойност на собственост (понякога се нарича състав), наследяване, способността да се отнасят един вид в друг такъв, че във връзка тип включва всички състояние на съответния тип поведение като част от себе си, и полиморфизъм, способността да замени обект, където се очаква различен тип. Релационни системи за описване на формата на знания за съхранение и извличане на данни, въз основа на предикат логика и истина отчети. По същество, всеки ред в таблица е декларация за факт в света, и SQL позволява на оператора за ефективно извличане на данни на тези факти, чрез предикат логика за създаване на изводи от тези факти. [Date04] и [Fussell] определят релационния модел се характеризира с отношение, атрибут, кортеж, връзка стойност и променлива връзка. Една връзка е в сърцето му, предикат истината за света, изложението на обстоятелствата (атрибути), които дават смисъл на сказуемото. Например, ние може да се определи връзката "лице" {SSN, име, град}, който гласи, че "съществува лице с социален SSN Security Number, който живее в град и се нарича Name". Имайте предвид, че в една връзка, атрибут поръчване е изцяло неуточнена. Кортеж е истина изявление в контекста на отношение, набор от стойностите на атрибутите, които съответстват на необходимия набор от атрибути във връзката, като например "{PERSON SSN = '123-45-6789" Name = "Град Катрин Кенеди" = "Сиатъл"} ". Имайте предвид, че две кортежи се считат за идентични, ако тяхната връзка и атрибутни стойности също са идентични. Връзка стойност, а след това е комбинация от връзка и набор от кортежи, които съответстват на тази връзка, и променлива връзка, като повечето променливи, контейнер за дадена връзка, но може да се промени стойността във времето. Така отношение на променливите Хората могат да бъдат написани, за да държи връзка {PERSON} и се състои от отношението стойност
{ {PERSON SSN='123-45-6789' Name='Catherine Kennedy' City='Seattle'},
  {PERSON SSN='321-54-9876' Name='Charlotte Neward' City='Redmond'},
  {PERSON SSN='213-45-6978' Name='Cathi Gero' City='Redmond'} }
Те често се наричат таблици (връзка променлива), редове (кортежи), колони (атрибути) и колекция от връзки с променливи като база данни. Тези основни типа елементи могат да се комбинират един срещу друг, като се използва набор от операторите (описан подробно в глава 7 от [Date04]): ограничава, проект, продукт, да се присъединят, разделение, съюз, пресичане и разликата, и те формират основата на формата и подход към SQL, универсално приемане език за взаимодействие с релационна система от оператор конзоли или програмни езици. Използването на тези оператори дават възможност за създаването на Получените стойности отношения, отношения, които се изчисляват от други ценности на връзката в базата данни - например, ние можем да създадем връзка стойност, която показва броя на хората, живеещи в отделни градове чрез използване на на проекта и да ограничи оператори в Хора връзка променлива, определено по-горе. Вече това е доста ясно се вижда, че има ясно изразени различия между релационния свят и света на обект видите "истински" разработването на система, и ще стане ясно, тъй като времето напредва. Важно е да се отбележи, обаче, че толкова дълго време като програмисти предпочитат да използват обектно-ориентирани езици за програмиране за достъп до релационни хранилища на данни, ще има винаги да бъде някакъв вид обектно-релационни съответствия, като двата модела просто са твърде различни, за да се преодолее тихо. (Може да се каже, същото е вярно за обектно-ориентирано и процедурно програмиране, но това е друг аргумент за друг ден.) O / R съпоставяне може да вземе мястото на различни от форми, на най-лесният на които да се признае е на автоматизирана O / R картографиране инструмент, като $ грама (TopLink), $ грама (хибернация) / $ грама (NHibernate), или $ грама (Gentle.NET). Друга форма на картографиране е ръчно кодирани, в които програмистите използват релационни ориентирани инструменти, като JDBC или ADO.NET за достъп до релационни данни и го разархивирайте в форма по-приятен обект съмишленици на разработчиците "на ръка". А трети е просто да приеме формата на релационни данни като "модел, от която да се действа, а роб на обектите около него този подход, това е също така известен в моделите лексикон като таблица с данни Gateway [PEAA, 144] или ред с данни Gateway [PEAA 152]; много данни за достъп слоеве в Java, така и NET използват този подход и да го комбинирате с код поколение, за да се опрости развитието на този слой. Понякога ние изграждане на обекти около релационна / маса модел, сложи допълнителна поведение около него и го наричат активен Запис [PEAA, 160]. В интерес на истината, този основен подход - роб един модел в условията и подход на другата - е традиционната отговор на импеданса несъответствие, ефективно "решаване" на проблема, без да обръща внимание на половината от него. За съжаление, повечето усилия за развитие, както и администрацията на Кенеди, не са готови да се види до логичния извод, с едро ангажимент към един подход върху друга. Например, докато повечето екипи за разработка ще бъде щастлив, това може да се приеме "обекти само" подход на ниво за съхранение предполага използването на обектно-ориентирано система за управление на бази данни (OODBMS), една тема, която често има никакво сцепление в рамките на висшия мениджмънт или юридическото екип за управление на данни. Обратния подход - "релационен само" подход - е почти безсмислено да се разгледа, като се има предвид технологията на ден в онова време това беше written4. Като се има предвид, че е невъзможно, да се "отприщи обектите си от всичките възможности", като генерал Уестморланд може да го наричаме, ние сме оставени с някаква хибридна обект-да-релационни картографиране подход, за предпочитане, че е автоматизиран колкото е възможно , така че разработчиците могат да се фокусират върху техните домейни Модел, а не върху детайлите на обекта за маса (и) картографиране. И тук, за съжаление, е мястото, където започва потенциал тресавище. Обектно-маса мапин проблем Един от първите и най-лесно разпознаваем проблеми при използването на обекти като предния край на магазина релационни данни е, че на това как да се набележат класове по масите. На първо място, това изглежда сравнително лесно упражнение - маси Карта на видове, колони полета. Дори типове полета, да застанат директно срещу релационните видове колона, най-малкото доста изоморфен степен: VARCHARs в низове, цели числа до цели числа, и така нататък. Така че има смисъл, че за даден клас, определени в системата, съответната таблица - вероятно да бъдат на едни и същи или тясно свързани име - се определя да отида с него. Или, може би,, ако обектът код се пише вече съществуваща схема, после клас карти на масата. Но тъй като времето напредва, това е съвсем естествено, че добре обучени обектно-ориентираното разработчик ще се стреми да се наберат наследство в обекта система, и да търсят начини да направят същото в релационния модел. За съжаление, релационния модел не поддържа всякакъв вид полиморфизъм или IS-Един вид връзка, така че разработчиците в крайна сметка се озовават приемане на един от трите възможни варианти, за да се очертаят наследство в релационна свят: маса на класа, маса-на- бетон клас, или маса на класа семейство. Всеки от тях носи потенциално значителни недостатъци. Маса на класов подход е може би най-лесно разбираем, защото тя се стреми да сведе до минимум "разстояние" между обектния модел и релационния модел всеки клас в йерархията на наследството си има своя собствена релационна таблица и обекти на получени видове са съединяват от релационна се присъединява в различните наследство, таблици. Така например, ако обектния модел има лице базов клас, със студентите, получени от човек и GraduateState получен от Student, тогава ще има три таблици, които трябва да притежават този модел, лице, студент и GRADUATESTUDENT, като всеки държеше полета, съответстващ класа със същото име. Относно тези таблици заедно, обаче, изисква от всеки да има независима първичен ключ (чиято стойност в действителност не се съхраняват в обекта лице), така че всеки получен клас може да има външен ключ отношение на своята таблица суперкласа. Причината за това е ясна: GraduateStudent обект, по силата на своето отношение към студенти и лице, е колекция от трите набора от държавата, и разликата между класовете до голяма степен е премахнато от време обект на тип е създаден в Java, така и NET, например, на самия обект е парче от паметта, която държи например областите, определени във всички класове и superclasses, заедно с показалеца на масата на методите, определени от същия йерархия. Това означава, че когато запитване за конкретен случай на релационния равнище, най-малко трима се присъединява трябва да се направи, за да се събере цялата състояние на обекта в работната памет на обекта програмата. Всъщност, става по-лошо от това - ако обектът йерархия продължава да расте, да речем, за да се включи професор, личен състав, студент (наследява от студентски), и цялата йерархия на AdjunctEmployees (наследява от персонала), както и с програмата се иска да намерите всички Лицата, чието фамилно име е Смит, после се присъединява към трябва да се направи за всеки извлечен клас в системата, тъй като семантиката на "Намери всички лица" означава, че заявката трябва да се стреми данни на лицето, масата, но след това направете скъп набор от присъединява към въвеждат в останалата част от данните в останалата част на базата данни, теглене в таблицата на професора да донесе останалата част от данните, да не говорим за студент, ADJUCTEMPLOYEE, персонал, и други таблици. Имайки предвид, че се присъединява са сред най-скъпите изрази в заявките RDBMS, това очевидно не е нещо, което да се извърши леко. В резултат на това, разработчиците обикновено приема един от другите два подхода, по-сложни в перспектива, но по-ефективно, когато се занимават с релационна съхранение: те или да създадете таблица на бетон (най-производни) клас, предпочитайки да приеме denormalization и разходите си, или друго, те създават една таблица за цялата йерархия, често и в двата случая, създаването на колона дискриминатора да се посочи кой клас принадлежи всеки ред в таблицата. (Различни хибриди на тези схеми са също е възможно, но обикновено не водят до резултати, които са значително по-различни от тези два). За съжаление, denormalization разходи често са от значение за голям обем от данни, и / или таблицата (ите) ще съдържат значителни количества празни колони, които ще трябва NULLability ограничения за всички колони, премахване на силни ограничения целостта, предлагани от RDBMS. Наследяването картографиране не е края на сдружения между обектите, типичната 1: N или m: N кардиналност асоциации, толкова често използвани в SQL и / или UML, се обработват по напълно различен начин: в обект системи, асоциацията е еднопосочен, от на associator на associatee (което означава, свързан обект (и) нямат представа, те са свързани факта, освен ако изрично двупосочен Сдружението се учредява), като има предвид, че в системи за релационни сдружението всъщност е обърната, от associatee associator (чрез външен ключ колони). Това се оказва да бъде учудващо важно, тъй като това означава, че за m: N асоциации, трета таблица трябва да се използва за съхранение на действителната връзка между associator и associatee, а дори и за едно: N отношения на associator няма присъщо познаване на отношенията сътрудници - откриват, че данните изисква се присъединят срещу някои или всички свързани таблици в някакъв момент. (Когато не извадиш, че данните са обект на разискване - виж Paradox Зарежда се, по-долу). Схема конфликтът със собствеността Дискусии за наследството на маса и схеми за картографиране на асоциацията показва също, основен недостатък: в сърцето си, много от инструментите за обектно-релационни съответствия се предположи, че схемата е нещо, което може да се определи според схеми, които помагат за оптимизиране на O / RM "заявки към релационни данни. Но това опровергава основния проблем, който често базата данни самата схема не е под прекия контрол на разработчиците, но вместо това е собственост на друга група в рамките на компанията, обикновено администриране на бази данни (DBA) група. За кого отговорност за проектирането на базата данни и вземането на решение кога схема са допустими промени - принадлежат? В много случаи, разработчиците започват нов проект с "чисто", празна релационна база данни, чиято схема е тяхно, за да се определи, както намерят за добре. Но скоро след приключването на проекта е да доставят (понякога дори и по-рано, което се дължи на политически и / или "торф война" въпроси), става ясно, че собствеността на разработчиците на схемата е временно в най-добрия - различните отдели започват да вдигат врява за доклади срещу базата данни, администраторите на бази данни се държат отговорни за изпълнението на база данни, като по този начин ги предизвика да се обадя "редакции" и денормализация на данните, и други екипи за разработка може да започне питане за това как те биха могли да направят използването на данните, съхранявани в тях. Преди твърде дълго, схемата трябва да бъде "замразен", като по този начин потенциал да създадат бариера за възражение редакции модел (виж Съединител безпокойство, по-долу). В допълнение, тези други отбори ще очакваме да видим релационния модел, определен в релационни, а не един, който поддържа изцяло правоъгълната форма на постоянство - например, "дискриминатора" колона от наследство, маса Mapping Проблем ще представлява трудности , и може би е всичко, но неизползваеми, за да релационни генератори доклад, като Crystal Reports. Освен ако разработчиците са готови да пишат всички доклади (и техните УИС, и отпечатването код и техните ад-хок възможности ...) на ръка, това е обикновено ще бъде неприемливо състояние на нещата. (За да бъдем честни, това не е толкова технически проблем, тъй като това е политически проблем, но той все още представлява сериозен проблем, независимо от неговия източник - или решение и като такава, тя все още представлява пречка за даден обект / релационна картографиране решение.) Dual-Schema Проблем В O / RM решение на метаданни към системата се провежда фундаментално в две различни места: веднъж в схема на база данни, и след като в обектния модел (друга схема въпроси, свързани с въпроса за собствеността схема е, ако щете , изразена в Java C или # вместо DDL). Ъпдейти или refactorings до един вероятно ще изискват подобни актуализации или refactorings до другия. Код редакции, за да съответстват на промени схемата на базата данни е считан за да бъде по-лесно, от двете редакции на базата данни често изисква някакъв вид миграция и / или адаптиране на данните, които вече са в базата данни, където код няма такова изискване. (Обекти, най-малко в тази дискусия, са краткотрайни в памет случаи, които ще изчезнат след прекратяване на процеса, който ги притежава Ако обектите се съхраняват в някакъв вид под формата на обект, който може да се задържи през процес на изпълнение - като поредица случаи на обекти, съхранявани на диска - тогава редакции обекти става също толкова проблематично). По-важното е, че докато тя не е необичайно за код да бъде разгърната специално на единната молба, често бази данни случаи се използва от повече от едно заявление, и тя е често неприемлив за бизнеса да предизвика на цялата компания редакция на кода просто защото на редакцията на един приложение изисква подобна база данни задвижване редакции. В резултат на това, тъй като системата расте с течение на времето, ще бъде все по-голям натиск на разработчиците, за да се "върже" обектен модел от схема на база данни, като че схемата промени няма да се нуждаят от сходни refactorings обектен модел, и обратно. В някои случаи, където O / RM не позволява такова разединяване, изцяло частна инстанция на база данни може да се наложи да се разгърнат, с точната схема, O / RM-базирано решение е построена от създаването на още един силоз на данни в IT среда, в която налягането е изграждането да се намалят тези силози. Проблеми идентичност на Тъй като, ако тези проблеми не са достатъчни, тогава ходи в друг проблем, че на самоличността на обекти и отношения. Както беше отбелязано по-горе, обект системи използват имплицитно чувство за идентичност, обикновено се основава на местоположението на обекта в паметта (вездесъщ този указател); алтернатива, това понякога се нарича като Object Identifier (OID), обикновено в системи, които не директно излагайте паметта, като обект на база данни (където е в памет на показалеца е доста безполезен като идентификатор отвън на базата данни). В релационния модел, обаче, идентичност е заложен в самата държава - два реда с точно същото състояние, които обикновено се считат за релационна корупция данни, както и същ факт, твърди, два пъти е излишно и контрапродуктивно. За да бъдем честни, трябва да бъде малко по-ясно тук, релационна система, в действителност, може да позволи на дублиращи се кортежи (както е описано по-горе), но често това е изрично забранени от изрично релационни ограничения, като например PRIMARY KEY ограничения. В тези ситуации, в които се допускат повтарящи се стойности, няма начин за релационна система, за да се определи коя от две дублиращи се редове се изтеглят - не е скрито чувство за идентичност отношение, с изключение на тези, предлагани от неговите атрибути. Същото не е вярно на обект системи, където два обекта, които съдържат точно идентични модели малко в две различни места на паметта са в действителност отделни предмети. (Това е причината за разликата между "==" и в Java или C # "е равна на ()".) Изводът тук е проста: ако двете системи ще се съгласи на чувство за идентичност, релационна система предлагат някаква уникална идентичност концепция (обикновено за автоматично увеличаване цяло число колона), така че да съответства на понятието идентичност на обекта. Това предизвиква някои сериозни опасения по отношение на автоматизирана O / R системи, тъй като чувство за идентичност е напълно различен -, ако две отделни потребителски сесии взаимодействат със същото отношение на склад, релационна система за база данни на едновременност системи ритник и да се осигури някаква форма на едновременен достъп , обикновено под формата на сделката метафора (ACID). Ако O / R система извлича отношение на съхранение (по същество формирането на "поглед" върху данните), сега ние имаме втори източник на данни за идентичност, в базата данни (защитени от сделка на горепосочената схема) и един в обект представителство в памет на тези данни, което няма последователна сделка подкрепа настрана от която е построила на езика (като монитори концепция в Java и. NET) или библиотеки (като System.Transactions инча NET 2.0), или от които може да бъде и unfortuantely често са лесно пренебрегнати от разработчиците. Управление на изолация и едновременност не е лесен проблем за решаване, и за съжаление езици и платформи, които често са на разположение на разработчиците все още не са толкова последователен и гъвкав като метафора за сделка на база данни. Усложнява този проблем допълнително е, че много O / R системи за въвеждане на значителна подкрепа кеширане в O / R слой (обикновено в опит да се подобри ефективността и да се избегне кръгли екскурзии до базата данни), а това от своя страна представя някои проблеми, особено ако кеширане система не е запис чрез кеш: когато реалното "вълни" на база данни, за да се осъществи, и какво означава това за сделка цялост, ако заявлението код смята, че пишат, че са настъпили, когато в действителност тя не е? Този проблем от своя страна само съединения, когато O / R система работи в множество процеси в предната част на машината на базата данни, които често се срещат в клъстери или от развъдник сценарии за сървъра на приложения. Сега на данни за самоличност се разпространява през N +1 места, N е броя на възлите на сървъра на приложения и 1 е самата база данни. Всеки възел трябва по някакъв начин да сигнализира за намерението си да се направи актуализация на други възли, с цел да се получи някакъв вид на едновременност се изгради, за да се предотврати едновременен достъп (от друга инстанция на една и съща сесия, или от съд на друга сесия, достъп до едни и същи данни) , което отнема време, убийственото представяне. Дори в случай на кеш само за четене, новини за хранилището на данни по някакъв начин трябва да се сигнализира в кешовете, работещи в сървър на приложения възли, изискващи сървъра към клиента комуникация с произход от базата данни; подкрепа за това не е добре разбрана или документирано в текущата реколта на съвременните релационни бази данни. За извличане на данни механизм проблем Така че, след като предприятието се съхранява в базата данни, как точно да го изтеглите? Във всички честност, чисто обектно-ориентирания подход ще направи използването на обекти подходи за извличане, в най-добрия случай се използва конструктор стил синтаксис идентифициране на обект (и) желания, но за съжаление конструктор синтаксис не е родово достатъчно, за да се даде възможност за нещо, което гъвкав; специално, тя липсва способността да се инициализира колекция от предмети и запитвания често трябва да се върне колекция, а не само с едно лице. (Множество екскурзии до база данни, за да донесе лица индивидуално обикновено се считат за твърде разточително, латентност и пропускателна способност, за да разгледа убедително като алтернатива - виж товара-Time Paradox, по-долу, за повече) В резултат на това, ние обикновено края с един от Query-By-Пример (QBE), Query-By-API (QBA), или Query-By-Language (QBL) подходи. А QBE подход, който да попълват обект образец на типа на обекта, което търсите, с полета в обекта определена стойност да се използва като част от заявката процес на филтриране. Така например, ако сте заявки лице, обект / маса за хора с фамилното име на Смит, създаде заявката така:
Person p = new Person(); // assumes all fields are set to null by default
p.LastName = "Smith";
ObjectCollection oc = QueryExecutor.execute(p);
Проблемът на QBE подход е очевиден: докато тя е напълно достатъчна за прости заявки, тя не е почти изразителен достатъчно да подкрепи на по-сложни стил заявка, че често ние трябва да изпълни намерите всички лица на име Смит или Кромуел "и" намеривсички лица, които не са наименувани Смит "са два примера. Макар че не е невъзможно да се изгради QBE подходи, които боравят с това (и по-сложни сценарии), то определено значително усложнява API. По-важното е, че той също така принуждава домейн обекти в неудобно положение - те трябва да поддържа анулира полета / свойства, което може да представлява нарушение на правила за домейни обекта в противен случай би се стреми да подкрепя - човек без име не е много полезна обект, в много сценарии, но това е точно какъв подход на QBE ще изисква на домейни предмети, съхранявани в него. (Практикуващите QBE често ще твърдят, че не е неразумно за изпълнение на обекта, за да вземе това предвид, но отново това е лесно, нито често се постига). В резултат на това обикновено Втората стъпка е да има обект от системата подкрепят "Query-By-API" подход, при който запитвания са изградени от заявката обекти, обикновено нещо на формуляра:
Query q = new Query();
q.From("PERSON").Where(
  new EqualsCriteria("PERSON.LAST_NAME", "Smith"));
ObjectCollection oc = QueryExecutor.execute(q);
Тук, заявката не се основава на празен "шаблон" на обекта, за да бъде възстановен, но на набор от "заявка обекти", които се използват заедно, за да се определи командния стил обект за изпълнение срещу базата данни. Множество критерии са свързани с помощта на някакъв вид Тригонометрия конструкция, обикновено "А" и "или" обекти, всеки от които съдържа уникални предмети критерии, които да тестват срещу. Допълнителна филтрация / манипулация обекти могат да бъдат маркирани върху края, обикновено чрез добавяне на разговори, като например "OrderBy (полето име)" или "GroupBy (полето име)". В някои случаи тези извиквания на методи всъщност са обекти, построени от програмист и нанизани заедно изрично. Разработчиците бързо да се отбележи, че по-горе подход (по принцип) много по-многословен от традиционния подход SQL, както и някои стилове на заявки (особено по-нетрадиционен се присъединява, като външната присъединява) са много по-трудно - ако не и невъзможно - да представлява в подхода QBA. От началото на тази, имаме един по-деликатен проблем, на разчита на разработчиците dicipline: името на таблицата ("лице") и име на колона в критериите ("PERSON.LAST_NAME") са стандартни струни, като и хранени със системата по време на работа, без вид на валидност проверка дотогава. Това представлява класически проблем в програмирането, вместо на "пръст на мазнини" грешка, когато разработчик всъщност не задава въпроси таблицата "лице", но "PRESON" таблица. Докато бърз на единица тест срещу живо на базата данни ще разкрие грешка по време на тестване на единица, това предполага две неща - че разработчиците са религиозни за приемане на единица тестване, и че единичните тестове се кандидатира срещу случаи на бази данни. Докато бившата се бавно стават повече от гаранция като все повече и повече разработчици стане "тест-заразен" (заеми, Gamma и избор на Бек на терминологията), последният все още изцяло се отвори за обсъждане и тълкуване, поради факта, че създаването и разкъсване надолу модел на базата данни, подходящо за единица тестове все още е трудно да се направи в база данни. (Макар че има различни начини да заобиколят този проблем, някои от тях не изглежда да се използва.) Ние сме изправени пред основния проблем, че по-голямата осведоменост на логически или физически се изисква представяне на данни от страна на разработчика - вместо просто да се фокусира върху това как обектите са свързани един към друг (чрез прости асоциации като масиви или събиране случаи), разработчик сега трябва да имат по-голяма осведоменост за формата, в която се съхраняват предмети, напускане на системата малко уязвими към промени в схема на база данни. Това понякога се премахнат вследствие на хибриден подход между двамата, при който системата ще поеме отговорността за тълкуване на асоциациите, оставяйки на разработчика да напиша нещо подобно:
Query q = new Query();
Field lastNameFieldFromPerson = Person.class.getDeclaredField("lastName");
q.From(Person.class).Where(new EqualsCriteria(lastNameFieldFromPerson, "Smith"));
ObjectCollection oc = QueryExecutor.execute(q);
Кой решава част от схема за привличане на вниманието към проблема за проблема и "мазнини свирене" проблем, но все още остава на разработчика, уязвими по отношение на опасенията за многословието и все още не дава отговор на сложността на пускането заедно по-сложна заявка, като мулти-тейбъл(или мулти-клас, ако щете) Запитване Регистриран на няколко критерия в най-различни начини. И така, следващата задача е да се създаде "Query-By-Language" подход, на който е написан нов език, подобен на SQL, но "по-добро" по някакъв начин, за да подкрепят вид на сложни и мощни заявки, които обикновено са подкрепени от SQL ; OQL и HQL са два примера за това. Проблемът тук е, че често тези езици са подгрупа на SQL и по този начин не предлагат пълната мощ на SQL. По-важното е, O / R слой вече е загубил важна "точка на продажба", на "обекти и само" мантрата, че тя роди на първо място, с помощта на SQL-подобен език е почти точно като използвате SQL себе си, така, как може да бъде "по-objectish"? Въпреки че разработчиците не може да се наложи да бъде наясно с физическата схема на модел на данните (заявка преводач език / изпълнител може да направи картографиране обсъждана по-рано), разработчиците ще трябва да е наясно как обект асоциации и имоти са представени в рамките на езика, и подгрупата на възможностите на обекта в рамките на команден език - например, е възможно да се напише нещо подобно?
SELECT Person p1, Person p2 
FROM Person 
WHERE p1.getSpouse() == null 
  AND p2.getSpouse() == null 
  AND p1.isThisAnAcceptableSpouse(p2) 
  AND p2.isThisAnAcceptableSpouse(p1);
С други думи, да сканирате чрез базата данни и да намерите всички самотни хора, които намират взаимно приемливо. Докато "isThisAnAcceptableSpouse" метод очевидно е метод, който принадлежи на лицето, клас (всеки случай човек може да има свои собствени критерии, чрез които да се преценява приемливостта на друг един - са блондинка, брюнетка или червенокоса, те са повече от $ 100,000 на година, и така нататък), не е ясно дали изпълнението на този метод е възможно в заявката език, нито е ясно дали той трябва да бъде. Дори и за най-незначителните реализации, сериозен удар за изпълнение ще е вероятно, особено ако O / R слой трябва да се превърне релационни данни на колони в предмети, за да изпълни заявката. В допълнение, ние нямаме гаранции, че предприемачът е създал този метод да бъде изобщо ефикасен, както и начини за налагане на някакъв вид на изпълнението на изпълнението наясно. (Критиците ще твърдят, че това е работещ проблем, като предложи две възможни решения Един от тях е за кодиране на преференциални данни в отделна таблица и тази част на заявката; това ще доведе до ужасно сложна заявка, че ще отнеме няколко страници с дължина и вероятно ще изисква SQL експерт, който да разплете по-късно, когато искате да се добавят нови преференциални критерии. Другата е на песента "приемливост" изпълнението в запомнена процедура в базата данни, които сега премахва код изцяло от обектния модел и ни оставя без "обект", основана решение каквато - приемливо, но само ако вие приемете предпоставката, че не всички изпълнението може да почива вътре в самия обект модел, който отхвърля "обекти и нищо, но се противопоставя" помещение, с която много O / R защитници отвори аргументи.) С частичен обект проблем и товара-тайм Paradox Отдавна е известно, че мрежа преминава, като извършва при вземане на традиционна молба за SQL, отнема значително време, за да процес. (Необработени показатели са пуснали тази стойност между три до пет порядъка, в сравнение с един прост метод за обаждане или Java или NET platform5. Приблизително аналогична, да ви отнеме двадесет минути карам до работа сутринта и ние наричаме, че времето, необходимо за изпълнение на градски разговор метод, четири заповеди на величина с които е приблизително времето, необходимо, за да пътуват до Плутон, или малко от четиринадесет години, един от начините.) Тази стойност е ясно нетривиално, така че в резултат на това разработчиците търсят начини да се намали тези разходи чрез оптимизиране на броя на кръгли пътувания и данни, които са извлечени. В SQL, тази оптимизация се постига чрез внимателно структуриране на SQL заявка, като се уверите, за да изтеглите само колоните и / или желаните маси, а от цели таблици или съвкупности от таблици. Например, когато изграждането на традиционния пробивно-надолу потребителски интерфейс, разработчикът е представено обобщение показване на всички записи, от които потребителят може да изберете един и веднъж избрани, разработчик след това показва пълния набор от данни за този конкретен запис. Като се има предвид, че ние искаме да направим пробивно-на лицата, релационна типа, описан по-рано, например, две запитвания, да направят това би било в ред (ако първото е избрано):
SELECT id, first_name, last_name FROM person;

SELECT * FROM person WHERE id = 1;
По-специално, да забележите, че само данните желания на всеки етап от процеса, се изтеглят в първата заявка, е необходимо обобщената информация и идентификатор (за последваща заявка, в случай първото и последното име не би било достатъчно, за да се идентифициратлицето, което пряко), а във втория, останалата част от данните, за да се покаже. В действителност, най-SQL експерти ще избягват маска "*" синтаксис колона, предпочитайки вместо това да назове всяка колона в заявката, както за изпълнение и поддръжка причини работоспособност, тъй като базата данни ще спомогне за по-доброто оптимизиране на заявката, както и за поддръжка, защото има ще бъде по-малък шанс на ненужни колонки, които се връщат като администраторите на бази данни или разработчиците се развива и / или refactor базата данни таблица (и). Тази идея е в състояние да се върне част на таблицата (макар и все още в релационна форма, което е важно за причините за затваряне, описани по-горе) е от основно значение за способността да се оптимизират тези запитвания по този начин - повечето заявки ще, в действителност, изискват само част от пълния връзка. Това представлява проблем за повечето, ако не всички, обект / релационни картографиране слоеве: целта на всяка O / R е да се даде възможност на разработчика да видите "нищо, но се противопоставя", и още на O / R слой не може да каже, от едно искане към друг, как обектите, върнати от заявката ще бъдат използвани. Например, това е напълно възможно, че повечето разработчици ще искате да напишете нещо по подобие на:
Person[] all = QueryManager.execute(...);
Person selected = DisplayPersonsForSelection(all);
DisplayPersonData(selected);
Значение, с други думи, че след като веднъж е бил избран от масива на хора Лице за да бъдат показани, не по-нататъшни действия за извличане е необходимо - в края на краищата, ти си обект, какво повече е необходимо? Проблемът тук е, че данните, които ще бъдат показани в първия дисплей ... () повикването не е пълноценна личност, но част от тези данни, тук сме изправени пред първата ни проблем, в това, че обектно-ориентирана система като C # или Java не може да се върне само "части" на обект - обект е обект, и ако лицето, обект се състои от 12 полета, а след това всички 12 области ще присъства във всеки човек се връща. Това означава, че системата е изправена пред един от трите неудобни избор: едно, изисква от това лице обекти трябва да бъде в състояние да се настанят "анулира полета, независимо на домейн ограничения по отношение на това, две, върнете лице, което изцяло запълнена с всички данни, съдържащи Лице обект; или три, някакъв вид на товара на търсенето, които ще получат тези области, ако и когато разработчик достъп до тези области, дори и косвено, може би чрез метода разговор. (Забележете, че някои обектно-базирани езици, като ECMAScript, разглеждане на обекти по различен начин от клас-базирани езици, като Java или C # или C + +, и като резултат, то е напълно възможно да се върне обекти, които съдържат различни номера на полета. каза, обаче, няколко езика притежават подобен подход не, дори и любим на всички динамичен език плакат дете, Ruby, и докато тези езици широко разпространено, такова обсъждане остава извън обсега на това есе.) За повечето O / R слоеве, това означава, че обектите и / или полета на обектите трябва да бъде възстановен в мързелив заредени начин, получаване на данните от това поле за търсене, защото извличането на всички от полетата на всички Лице обекти / отношения " ясно "да бъде огромна загуба на честотна лента за този конкретен случай. Обикновено целия набор на обекта на полета ще бъде възстановен, когато е достъпна всяка област, не все още връща. (Този подход е за предпочитане пред поле по поле подход, защото има по-малък шанс на "N +1 заявка проблем", в който извличането на всички данни от обект изисква 1 заявка за извличане на първичен ключ + N заявки за извличане на всяка поле от таблицата, като е необходимо този начин се намалява потреблението на честотната лента за извличане на данни - не unaccessed областта ще имат своите данни, които са извлечени, но очевидно не може да се сведе до минимум пътувания кръг мрежа). За съжаление, полетата в рамките на обекта са само част от проблема - друг проблем, пред който сме изправени, е, че обектите са често се свързва с други обекти, в различни cardinalities (един-към-един, един-към-много, много-към-едно , много-към-много) и O / R картографиране трябва да се направят някои първоначални решения за това кога да изтеглите тези, свързани обекти, и въпреки най-добрите усилия на O / RM "разработчиците, винаги ще има общо ползване случаите, когато решението, взето ще бъде напълно погрешно нещо, което трябва да се направи. Най-O / RM "предложи някакъв вид на разработчика задвижване на решения подкрепа, обикновено някакъв конфигурационен файл, или да съдържат, за да се определи точно каква на извличане политика ще бъде, но тази настройка е глобален пред класа, и като такъв не може да се променя ситуационна основа. Обобщение Като се има предвид, а след това, че обектите не-релационни картографиране е необходимост в съвременната система за предприятието, как може някой да я обявят тресавище, от което няма спасение? , Виетнам отново служи като полезна аналогия тук - докато положението в Южен Индокитай изисква отговор от американците, имаше разнообразие от отговорите на Кенеди и Johson, включително един и същи вид на отговор, който наскоро падането на Сухарто в Малайзия, генерирани от САЩ, което означава, че нито изобщо. (Не забравяйте, Айзенхауер и Дълес не счита, Южен Индокитай, за да бъде част от Domino Теория на първо място, те са много по-загрижени за Япония и Европа). Няколко възможни решения се представят на O / RM проблем, някои изискват някакъв вид за "глобална" действията на Общността като цяло, някои по-достъпен за екипи за разработка "в окопите":
  • Изоставяне. Разработчици просто изцяло върху обекти и се върнете към програмен модел, който не създава обект / релационна импеданс несъответствие. Докато отблъскващо, при определени сценарии обектно-ориентирания подход създава голямо натоварване, отколкото се спестява, и ROI просто не е там, за да оправдае разходите за създаване на богат модел на домейн. ([Фаулър] говори за това до известна дълбочина.) Елиминира проблема твърде добре, защото ако няма обекти, няма импеданс несъответствие.
  • Безрезервно приемане. Разработчици просто на релационна съхранение изцяло и се използва за съхранение модел, който пасва на начина, по който техните езици за избор поглед към света. Обектно-системи за съхранение, като например проекта db4o, решаване на проблема спретнато чрез съхраняване на обекти директно на диск, което премахва много (но не всички) от посочените по-горе въпроси, няма "втора схема", например, защото единствената схема е, че на самите обекти определения. Въпреки че много DBAS слаб мъртъв при мисълта, във все по-ориентирана към услугите свят, който избягва употребата на идеята за пряк достъп до данните, но вместо това изисква всякакъв достъп чрез услугата портал капсулиране на механизъм за съхранение, далеч от любопитните очи, то става напълно възможно да си представим разработчици съхранение на данни във форма, която е много по-лесно за тях да се използва, а не DBAS.
  • Ръчно картографиране. Разработчици просто да приеме, че не е толкова тежък проблем за решаване ръчно в края на краищата, и напишете направо релационна достъп код, за да се върнете на отношението към езика, достъп кортежи, и да обсипе предмети, тъй като е необходимо. В много случаи, този код може дори да се генерира автоматично от инструмент за разглеждане на база данни, метаданни, елиминирайки някои от основната критика на този подход (че, "Това е твърде много код, за да пиша и поддръжка").
  • Приемане на O/R-M ограничения. Разработчици просто да приеме, че няма начин за ефективно и лесно да затворите цикъла на O / R несъответствие, както и O / RM, за да се реши 80% (или 50% или 95%, или каквото процент изглежда уместно) на проблема и използването на SQL и релационни достъп (като "сурова" JDBC или ADO.NET), за да ги изпълняват миналото тези райони, където O / RM би създало проблеми. По този начин носи своя справедлив дял от рискове, обаче, тъй като разработчиците, с помощта на O / RM трябва да са наясно кеширане O / RM решение го прави в рамките на, защото "суровия" релационен достъп очевидно няма да бъде в състояние да се възползват от че кеширане слой.
  • Интеграция на релационни концепции на езиците. Разработчици просто да приеме, че това е проблем, които трябва да бъдат решени от езика, не от библиотека или рамка. За последното десетилетие или повече, акцент върху решения на проблема с O / R са фокусирани върху опитват да въвеждат обекти близо до базата данни, така че разработчиците могат да се фокусират изключително върху програмирането в един парадигма (тази парадигма е, разбира се, обекти ). През последните няколко години, обаче, предизвика интерес в "скриптови езици с далеч по-силен набор и поддръжка на списък, като Ruby, идеята, че може би друго решение е подходящо: въвеждат релационни понятия (, които в сърцето си, се определят на основата на) в основните програмни езици, което го прави по-лесно да се преодолее пропастта между "набори" и "обекти". Работата в това пространство по този начин много са ограничени, ограничени предимно изследователски проекти и / или "ресни" езици, но няколко интересни усилия се набира видимост в рамките на общността, като функционални / обект хибридни езици като Scala или F #, както и директен интеграция в традиционните OO езици, като например проекта на LINQ от Microsoft за C # и Visual Basic. Едно такова усилие, което не успя, за съжаление, е SQL / J стратегия, дори и там, подходът е ограничен, не се стреми да включи залязва в Java, но просто да се даде възможност за вграден SQL призовава да се обработва предварително и преведени в кода на JDBC от преводач.
  • Интеграция на релационни понятия в рамки. Разработчици просто да приеме, че този проблем е решим, но само с промяна на перспективата. Вместо да се разчита на езикови или библиотека дизайнери, за да решим този проблем, разработчиците различно виждане за "обекти", които е по-релационна в природата, изграждане на домейни рамки, които са по-пряко, изградени около релационни конструкции. Например, вместо създаване на Лице клас, че притежава своите например данни директно в области вътре в обекта, разработчиците създават на лице клас, че притежава своите например данни в един редови набор (Java) или DataSet (C #) например, които могат да бъдат сглобени с други RowSets / набори от данни в лесен за кораб блок на данни за актуализация срещу базата данни, или разопаковани от базата данни в отделните обекти.
  • Имайте предвид, че този списък не е представен в някакъв определен ред, а някои са по-привлекателни за всички останали, които са "по-добро" е оценъчно съждение, че всеки разработчик и развитие на екипа трябва да направи за себе си.
  • Точно както го е възможен, че САЩ може да са постигнати някои мярка на "успех" във Виетнам са го държат ясна стратегия и разбира една по-ясна връзката между ангажимент и резултати (ROI, ако щете), то е възможно, че обекта / релационна проблем може да бъде "спечелени" чрез внимателно и разумно прилагане на стратегия, която е наясно celarly на собствените си ограничения. Разработчици трябва да са готови да предприемат "победи", където те могат да ги получат, и не попадат в капана на хлъзгав наклон като искат да създават решения, които все по-често струват повече и дават по-малко. За съжаление, както историята показва, войната във Виетнам, дори осъзнаване на опасностите, на хлъзгав наклон често не е достатъчно, за да се избегне затъването в тресавище. Лошо е, че е тресавище, че е просто твърде привлекателна, за да мине, Siren песен, която продължава да привлича развитие на екипи от всички размери на предприятия (включително и тези на Microsoft, IBM, Oracle, и слънце, за да назовем само няколко) срещу скалите , с впечатляващи резултати. Lash си към мачтата, ако искате да чуете песента, но нека моряците ред.
Бележки 1 Един по-късен анализ от съответните директори, включително тогавашният секретар на отбраната Робърт Макнамара - заключи, че никога не половината на атаката дори се състоя. 2 Това е може би най-голямата ирония на войната, че Съдбата на човека, избран да води по време на най-голямата чуждестранна заплитане на Америка е лидер, чиято основна задача е изцяло насочена в рамките на собствените си брегове. Ако не обстоятелства заговор друго, хипитата, скандирайки "Хей, хей LBJ, колко момчета те убия днес" извън Овалния кабинет може да са били много добре върлите привърженици на Джонсън. 3 По ирония на съдбата, капсулиране, за целите на поддръжка простота Оказва се, да бъде основна мотивация за почти всички от най-големите иновации в Езикова компютърни науки - процедурни, функционални обект, аспект, дори и релационни технологии (Date02) и други езици всички цитират "капсулиране" като основни движещи фактори. 4 Ние, може би, би могъл да помисли за съхранена процедура езици като T-SQL или PL / SQL, за да бъде "релационен" програмни езици, но дори и тогава, това е изключително трудно да се изгради UI в PL / SQL. 5 В този случай, аз бях с Java RMI метод призовава срещу местните извикване на метод. Подобни резултати са доста лесно да се получи за SQL-базиран достъп до данни чрез измерване на процеса на разговори по отношение на процеса на повиквания, използвайки база данни продукт, който поддържа и двете, като Cloudscape Derby / или HSQL (Ултразвуковият SQL). Перевод с http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx На головну http://openspacelands.com  
OpenSpaceLands