Inżynieria oprogramowania z użyciem narzędzia CASE – przykładowy projekt Biblioteka

W dniu 11.12.2020, uda­ło mi się w koń­cu prze­pro­wa­dzić pre­zen­ta­cję on-line. Celem była pre­zen­ta­cja reali­za­cji meto­dy MBSE z narzę­dziem CASE (tu Visual-Paradigm) i jej efek­tów. Adresatem są zarów­no ana­li­ty­cy, archi­tek­ci opro­gra­mo­wa­na jak i deve­lo­per (pro­gra­mi­ści) jako osta­tecz­ny adre­sat doku­men­tu. Podobną pre­zen­ta­cję pro­wa­dzi­łem wcze­śniej na Konferencji beIT 2020. Popularność tych pre­zen­ta­cji spo­wo­do­wa­ła, że całość prze­ro­dzi­ła się w pro­jekt badawczy. 

Artykuł ten podzie­li­łem na części: 

Krótkie wprowadzenie

Wykonanie ana­li­zy i opra­co­wa­nie takie­go pro­jek­tu (zakres taki jak ta biblio­te­ka) to pra­co­chłon­ność rzę­du dwóch moich dni samo­dziel­nej pra­cy z doku­men­ta­mi źró­dło­wy­mi (ma je każ­da dzia­ła­ją­ca orga­ni­za­cja, start-up’y mają biz­ne­spla­ny). Kolejny etap to wybór deve­lo­pe­ra i mój nad­zór autor­ski nad jego pra­ca­mi (dal­szy komen­tarz na koń­cu artykuły).

Dla porów­na­nia efek­ty zasto­so­wa­nia meto­dy opar­tej na prze­ka­za­niu pro­jek­tu od razu deve­lo­pe­ro­wi (meto­da zwin­na): Library, DDD/Event-stor­ming, jest to nawet kil­ka­na­ście dni pra­cy nie jed­nej oso­by a całe­go zespo­łu. Projekt ten zawie­ra nad­mia­ro­we ele­men­ty kom­pli­ku­ją­ce kod, co pod­no­si kosz­ty jego wytwo­rze­nia a potem utrzy­ma­nia. Jest to typo­wy efekt tego typu meto­dy pra­cy (nie komen­to­wa­łem tu sze­rzej tego ale zain­te­re­so­wa­nych pro­szę o porów­na­nie tego z moją archi­tek­tu­rą). Warto wie­dzieć, że tak­że sam fakt uży­cia rela­cyj­ne­go mode­lu danych i zapy­tań SQL (plus ewen­tu­al­ne mapo­wa­nie ORM) zna­ko­mi­cie pod­no­si pra­co­chłon­ność (czy­li kosz­ty) na eta­pie two­rze­nia opro­gra­mo­wa­nia, oraz wymu­sza tak­że dodat­ko­we pra­ce w póź­niej­szych pra­cach roz­wo­jo­wych (każ­da poważ­niej­sza zmia­na to migra­cja do nowe­go mode­lu danych i refak­to­ring cało­ści). Baza danych będzie tu nawet kil­ka­na­ście razy bar­dziej skom­pli­ko­wa­na niż w moim pro­jek­cie (tyl­ko trzy doku­men­ty), korzy­sta­nie z niej także. 

Osoby zain­te­re­so­wa­ne wyłącz­nie pozna­niem efek­tów pra­cy (doku­metn Analiza biz­ne­so­wa i Projekt logi­ki apli­ka­cji), pro­szę o przej­ście od razu na koniec arty­ku­łu, gdzie moż­na pobrać aktu­al­ny plik wyni­ko­wy PDF. 

Architektura i wzorce projektowe

MVC

Projekt w pre­zen­ta­cji jest opar­ty na wzor­cach projektowych:

MDA/PIM/CIMmodel dzie­dzi­ny systemu

Mikroserwisy

(w lite­ra­tu­rze przed­mio­tu, dla odróż­nie­nia od tech­no­lo­gii i śro­do­wi­ska wyko­naw­cze­go mikro­ser­wi­sów, sto­so­wa­ne jest tak­że poję­cie mikro apli­ka­cji” (MicroApp)).

Mikrosewisy

Paradygmat obiektowy

Obiektowo-kom­po­nen­to­wa archi­tek­tu­ra na bazie wzor­ca BCE i doku­men­to­wym mode­lu danych:

Paradygmat obiek­to­wy i wzo­rzec archi­tek­to­nicz­ny BCE

Prezentacja

Opis

W toku pre­zen­ta­cji poka­zu­ję co robię, nie obja­śniam uży­tych narzę­dzi, gdyż w tym przy­pad­ku nie było moim celem. Prezentacja ma dość duże tem­po, celem była poka­za­nie meto­dy MBSE i zalet pra­cy z narzę­dziem CASE.

Pokazałem klu­czo­we eta­py pra­cy. Pierwszy to ana­li­za tek­stu źró­dło­we­go. Od wie­lu lat z powo­dze­niem sto­su­ję meto­dy pozy­ski­wa­nia wie­dzy o bada­nej orga­ni­za­cji opar­te na dowo­dach” (evi­den­ce-based ana­ly­sis, ), czy­li na fak­tach opi­sa­nych w doku­men­tach (pra­wo, wewnętrz­ne regu­la­mi­ny, doku­men­ty ope­ra­cyj­ne takie jak dowo­dy księ­go­we, umo­wy, zamó­wie­nia, doku­men­ty przy­cho­dzą­ce, itp.). 

W cza­sie poka­zu powsta­wał pro­jekt opro­gra­mo­wa­nia dla Biblioteki. Podstawowe źró­dło wie­dzy o tym jak dzia­ła biblio­te­ka to Regulamin Biblioteki.

VP – ana­li­za­tor tekstów

Na pod­sta­wie ana­li­zy tego tek­stu powstał słow­nik klu­czo­wych pojęć oraz tak zwa­ny model poję­cio­wy, czy gra­ficz­na for­ma słow­ni­ka (tu fragment):

VP – Model poję­cio­wy dzie­dzi­ny systemu

Powstał model pro­ce­su biz­ne­so­we­go wypożyczeń:

(VP – pro­ces biz­ne­so­wy obsłu­gi wypożyczeń

z któ­re­go wie­my, że klu­czo­wym doku­men­tem w tym pro­ce­sie jest jest Karta Wypożyczenia (for­mu­larz, dane):

VP – struk­tu­ra kar­ty wypożyczenia

Po ana­li­zie pro­ce­su powsta­je zakres pro­jek­tu (wyra­żo­ny jako wyma­ga­ne usłu­gi apli­ka­cyj­ne w nota­cji UML: przy­pad­ki użycia):

VP – usłu­gi apli­ka­cyj­ne jako przy­pad­ki użycia

Jednym z klu­czo­wych ele­men­tów jest sce­na­riusz reali­za­cji tej usłu­gi, do jego opi­su potrzeb­na jest jed­nak archi­tek­tu­ra reali­za­cji usłu­gi (model PIM):

VP – archi­tek­tu­ra usłu­gi (mikro­ser­wis, wzo­rzec BCE)

Na jego pod­sta­wie powsta­je scenariusz:

VP – dia­gram sekwen­cji jako sce­na­riusz realizacji 

Poniżej zapis pre­zen­ta­cji, na któ­rej poka­za­no jak powsta­ły ww. ele­men­ty pro­jek­tu. Na koń­cu zoba­czy­cie tak­że jak pro­wa­dzę zdal­na komu­ni­ka­cję i jak powsta­je peł­na doku­men­ta­cja cał­ko­wi­cie bez uży­cia opro­gra­mo­wa­na biurowego. 

Nagranie

UWAGA! Projekt jest aktu­ali­zo­wa­ny, zawar­tość pli­ku do pobra­nia odbie­ga już nie­co od powyższego.

Analiza biznesowa i projekt aplikacji – dokument do pobrania

W ramach pre­zen­ta­cji powstał doku­ment sta­no­wią­cy pro­dukt pra­cy ana­li­ty­ka pro­jek­tan­ta. Poniżej jego sta­le aktu­ali­zo­wa­na wer­sja, aktu­ali­za­cje są kon­se­kwen­cją pytań do jego tre­ści zgła­sza­nych pod arty­ku­łem i w innych wątkach. 

Zapraszam do pobie­ra­nia i zada­wa­nia pytań do jego tre­ści, szcze­gól­nie deve­lo­pe­rów. Celem obec­ne­go bada­nia jest odpo­wiedź na pyta­nie: Co i jak moż­na udo­ku­men­to­wać jako pro­jekt Platform Independent Model (PIM) a co już tyl­ko jako jego imple­men­ta­cję PSM (Platform Specific Model), czy­li usta­le­nie gra­ni­cy pomię­dzy ana­li­zą i pro­jek­to­wa­niem a implementacją. 

Celem pro­jek­tu jest tak­że porów­na­nie. Np. uzy­ska­ne­go efek­tu (czas i koszt uzy­ska­nia speł­nia­ją­cej wyma­ga­nia apli­ka­cji) z pro­duk­tem meto­dy event storming”(eventstorming): https://​github​.com/​d​d​d​-​b​y​-​e​x​a​m​p​l​e​s​/​l​i​b​r​ary. Inne miej­sce do porów­na­nia: Język UML ? pro­jekt skle­pu kom­pu­te­ro­we­go, mate­riał na PJWSTK Metody budo­wy dia­gra­mu klas. 

Inny przy­kład do porównania:

Przykład
Dla porów­na­nia dia­gram przy­pad­ków uży­cia opi­su­ją­cy biblio­te­kę inne­go auto­ra: https://​wazniak​.mimuw​.edu​.pl/​i​n​d​e​x​.​p​h​p​?​t​i​t​l​e​=​I​o​-​5​-​w​y​k​-​S​l​a​j​d13 (tu zapra­szam tak­że do lek­tu­ry arty­ku­łu: Diagram Przypadków Użycia).

Na wszel­kie pyta­nia do tre­ści tej pre­zen­ta­cji i Raportu z ana­li­zy i pro­jek­to­wa­nia, odpo­wia­dam pod tym arty­ku­łem. Będą tu tak­że publi­ko­wa­ne anon­se o udo­stęp­nie­niu do pobra­nia aktu­ali­za­cji pli­ków projektu.

Aktualizacja: Jarosław Żeliński lip 5, 2022 @ 17:10

W 2013 roku, opu­bli­ko­wa­łem inny, bar­dzo pro­sty pro­jekt gdy w sza­chy, wyko­na­ny iden­tycz­ną meto­dą (w koń­cu mamy MDA i tego UML i BPMN od daw­na), zapra­szam do lek­tu­ry: Plansza do gry w sza­chy czy­li ana­li­za i pro­jek­to­wa­nie.

Zobacz tak­że:

Inne artykuły na podobny temat

Komentarze

  1. Adamzpu 12 maja 2021 at 08:54

    Ciężko prze­ło­żyć to na kod jed­nak lepiej jak ogar­nię­ci dewe­lo­pe­rzy prze­pro­wa­dzą dobry event stor­ming, potem znaj­dą domeny/poddomeny boun­ded con­te­xty i ich mapę. Łatwiej jest zna­leźć agre­gat jeśli jest jakaś zło­żo­nosc i tam zro­bić DDD czy­li w core doma­in na tym na czym się ma prze­wa­gę biznesową.

    • Jarosław Żeliński 12 maja 2021 at 08:58

      Na tym eta­pie jest to logi­ka i bazo­wa archi­tek­tu­ra. Są klu­czo­we poję­cia i sza­blo­ny for­mu­la­rzy. Jestem cie­ka­wy cze­go tu kon­kret­nie nie ma? Zakładam, że zesta­wie­nie śro­do­wi­ska deve­lo­per wyko­nu­je sam.

    • Jarosław Żeliński 14 maja 2021 at 10:08

      Dokument już zawie­ra wię­cej infor­ma­cji dla developera.

  2. Sławek Sobótka 12 maja 2021 at 09:18

    @Jarek: Odpowiadając na pyta­nie Czego tu nie ma” na pew­no w trak­cie ana­li­zy nie uda­ło się odkryć kil­ku klu­czo­wych pod-domen, np dostęp­no­ści. Rzeczowniki poka­za­ły powierzch­nię” – to jak rozu­mu­je nie­świa­do­my user, ale głę­bo­ki model (deep model u Evansa) jest nie­od­kry­ty i będzie stra­szył” przez kom­pli­ka­cję reguł… Tu wię­cej https://​github​.com/​d​d​d​-​b​y​-​e​x​a​m​p​l​e​s​/​l​i​b​r​ary

    • Jarosław Żeliński 12 maja 2021 at 09:55

      Dokument jest na eta­pie roz­wo­ju 🙂 (jest uzu­peł­nia­ny, bo fak­tycz­nie jest ubo­gi jesz­cze). Czym tu jest dostęp­ność”? Jaką powierzch­nię”? Deep model ok, czy­li co 🙂
      Mam nadzie­ję, że wywią­że się tu jakaś dys­ku­sja bo moim celem jest mię­dzy inny­mi roz­wią­za­nie pro­ble­mu slan­gu deve­lo­pe­ra. Znakomita więk­szość moich klien­tów ma bar­dzo złe doświad­cze­nia i wra­że­nia po event stor­min­gach” z deve­lo­pe­ra­mi 😉 bo po pro­stu nie rozu­mie­ją ani pytań ani odpo­wie­dzi ale pła­cą wiec sie­dzą ;). Ja zaś dosta­ję jakieś notat­ki po tych spo­tka­niach i też mam nie­ma­ły problem. 

      To zaś: jest dokład­nie tym cze­go chcę uni­kać czy­li np. even­ty: pobra­nie i zwrot książ­ki. A oso­bi­ście sto­ję na sta­no­wi­sku, że zwrot to przy­wo­ła­nie ist­nie­ją­cej już kar­ty wypo­ży­cze­nia i wsta­wie­nie daty zwro­tu. Po event stor­min­gu dosta­ję zawsze masę spi­sa­nych akcji”, któ­re tak na praw­dę są kli­ka­niem róż­nych pól tego same­go for­mu­la­rza. Dlatego zawsze od razu jadę na makie­tach for­mu­la­rzy. Podobnie w kwe­stii reguł i zda­rzeń: prze­trzy­ma­nie książ­ki to stwier­dze­nie fak­tu w momen­cie kon­tro­li lub zwro­tu, to sie samo nie robi :). Ale cie­ka­wy jestem efek­tu. Lada moment kolej­na wersja 🙂

    • Jarosław Żeliński 12 maja 2021 at 10:01

      Możemy to potrak­to­wać jako dys­ku­sję porów­nu­ją­cą te meto­dy: event stor­ming: i form (docu­ment) orien­ted design” 🙂

    • Jarosław Żeliński 12 maja 2021 at 12:17

      Pierwsze moje wra­że­nie z tego co pod­lin­ko­wa­łeś to ogrom­na zło­żo­ność i licz­ba rze­czy, czy­taj: mega pra­co­chłon­no­ści same­go tego warsz­ta­tu i zarza­dza­nia jego pro­duk­tem.. a Podejście zorien­to­wa­ne na dzie­dzi­nę i doku­men­ty, już po krót­kim bada­niu poję­cio­wym poka­zu­je, że ope­ru­je­my wyłącz­nie opi­sem książ­ki (zasób biblio­tecz­ny) i opi­sem fak­tu wypo­ży­cze­nia (Wypożyczenie, albo Karta wypo­ży­cze­nia). Kara za prze­trzy­ma­nie to cecha Wypożyczenia (czas od daty wypo­ży­cze­nia do daty zwro­tu), i spo­koj­nie moż­na ja imple­men­to­wać póź­niej. Wszelkie upraw­nie­nia to tyl­ko regu­ły ope­ru­ją­ce na sta­nie sesji (kto zalo­go­wa­ny) i rodza­ju doku­men­tu (np. Wypożyczenie jest edy­to­wal­ny tyl­ko gdy zalo­go­wa­ny jest biblio­te­karz) i to regu­ła Bibliotekarz może nad­pi­sać kar­tę wypożyczenia. 

      Całość 9dwa typy doku­men­tów) paku­ję do bazy NoSQL i po krzy­ku. Logika apli­ka­cji to dwa for­mu­la­rze, słow­ni­ki pól i regu­ły dla nich.

    • Jarosław Żeliński 4 lutego 2022 at 18:53

      Nie ma tu żad­nych pod­do­men”, o ile pod poję­ciem dome­na rozumiemy:

      doma­in – an area of inte­rest or an area over which a per­son has control:
      – the doma­in of poly­mer science
      – public and pri­va­te domains

      I tak jest rozu­mia­na tak­że u Evansa. Tak więc dostęp­ność książ­ki i jej wypo­ży­cze­nie to nie są dwie dome­ny. Nie wiem co masz na myśli pisząc Rzeczowniki poka­za­ły powierzch­nię””. Głęboki model to wewnętrz­na archi­tek­tu­ra reali­za­cji usług i sce­na­riu­sze z uży­ciem jej ele­men­tów: tu jest nawet dość dokład­nie zamodelowana… 

      W tym co lin­ku­jesz library/docs/” są nie­ste­ty mało war­to­ścio­we wybiór­cze kon­tek­sty użyt­kow­ni­ka w sty­lu new day star­ted”.… co to jest???

  3. Sławek Sobótka 12 maja 2021 at 11:59

    To jest temat chy­ba na serię kil­ku, godzin­nych roz­mów na video. Trzeba by wziąć kil­ka kej­sów i poka­zać co robi­my i dla­cze­go rob­my. Rzucę kil­ka myśli, bo trze­ba by usta­lić wspól­ny kon­tekst aby móc dalej dyskutować.

    Pierwsza rzecz to kla­sa problemu:
    – czy robi­my coś, co z góry wia­do­mo jak dzia­ła, ma dzia­ła tak samo, tyl­ko w nowym sys­te­mie, bo nowy będzie lep­szy (pyta­nie po co nowy, sko­ro ma dzia­łać tak samo)
    – szu­ka­my jak coś ma dzia­łać, wali­du­je­my pomy­sły, ale nie chce­my robić tej wali­da­cji kodem, bo to kosz­tu­je czas (pie­nią­dze teraz wszy­scy mają na it;)
    – odkry­wa­my jak dzia­ła jakieś legacy

    To było­by pierw­sze zało­że­nie. Bo przy­kła­do­wo tak jak piszesz wsta­wie­nie daty zwro­tu” to już suge­ro­wa­nie jakie­goś roz­wią­za­nia. Że jest jakaś data i się ją wsta­wia. Ok być może mode­lu­jąc nowy biz­nes doj­dzie­my do takiej decy­zji. Jeżeli mode­lu­je­my ist­nie­ją­cy, in oni teraz wsta­wia­ją sobie jakieś tam daty gdzieś, to pyta­nie, czy zawsze, czy są inne spo­so­by doko­na­nia zwro­tu? A może nie cho­dzi o zwrot o powrót zaso­bu do puli dostęp­nych. A może zale­ży od kon­tek­stu z jakie­go patrzy­my? Zwrot to poję­cie z kon­tek­stu kar/reputacji klien­ta z dostęp­ność to kon­tekst inwen­ta­rza? Czasem coś zacho­dzi w obu kon­tek­stach a cza­sem tyl­ko w jed­nym? To jest ten głę­bo­ki model. I nie ocze­ku­ję, że zwy­kły user” mi takie coś poda na tacy, bo nie tego się od niego/jej oczekuje.

    Modelowanie fak­tów, że coś tam wpi­sa­no do bazy, skoń­czy się cru­dem… Czy to źle? Niekonicznie, jeże­li fak­tycz­nie chce­my cru­da. Ale jak poja­wi się potrze­ba task based UI” bo nikt nie będzie umiał obsłu­gi­wać UI cru­do­we­go to oka­że się, że pod spodem mamy tyl­ko model danych a nie biznesu.

    Dalej co do tych for­mu­la­rzy… Jak zmie­nię for­mu­larz (bo np ux desi­gner tak uzna, albo na tele­fo­nie mam mniej miej­sca) to zmie­nia mi się model biz­ne­su? Czy to tyl­ko wzier­nik” do sys­te­mu, jeden z wielu.

    I jesz­cze odno­śnie tych cru­dów i mode­lo­wa­nia for­mu­la­rzem: jak by wyglą­dał model takie np alle­gro? :PPP Tam jest guzik kup teraz i dugi zapłać. Pod spodem wg ofi­cjal­nych danych 1200 micro­se­rvi­ces i pew­nie w sumie gru­bo ponad 1k ludzi w developmencie.

    A dalej jak przej­dzie­my w archi­tek­tu­rę roz­wią­za­nia i mocro­se­rvi­ces. Jak zapew­nić Single Source of Truth aby unik­nąć antyw­zor­ców Feature Envy i Data Envy? Zrobimy te micro i się o każe, że każ­dy roz­ma­wia z każ­dym. Nie ma żad­nej auto­no­mii w sen­sie: a) nie­za­leż­ne pra­cy zespo­łów i b) moż­li­wo­ści pra­cy czę­ści sys­te­my mimo awarii/przestoju innych. Trze trze­ba wziąć pod uwa­gę w ana­li­zie. Gdzie są źró­dła praw­dy, gdzie komen­dy, któ­re do nich tra­fia­ją? Jakie są głów­ne pyta­nia biz­ne­so­we, któ­rych źró­dła praw­dy modelujemy?

    Tutaj przy­kład: przy­to­czo­na prze­ze mnie dostęp­ność” – wdzięcz­ny przy­kład, bo każ­dy biz­nes, któ­ry obra­ca jaki­miś skoń­czo­ny­mi dobra­mi (książ­ki, hulaj­no­gi, poko­je w hote­li itd) na tym stoi oraz czę­sto jest to źle zro­bio­ne 😛 Jest pyta­nie: czy książ­ka jest dostęp­na? W sen­sie czy są jakieś egzem­pla­rze dane­go tytu­łu? Co ma na to wpływ? Czy są wyda­ne komuś, czy są pla­no­wa­ne kon­ser­wa­cje, czy jest kolej­ka ocze­ku­ją­cych. Jak sobie zro­bi­my naiw­nie 3 mikro­ser­wi­si­ki, z któ­rych każ­dy ogar­nia: wypo­ży­cze­nia, kon­ser­wa­cje i rezer­wa­cje to teraz każ­dy musi z każ­dym roz­ma­wiać, aby wie­dzieć jaka jest dostęp­ność. No i mamy kolej­ną kata­stro­fę architektoniczną.…

    • Jarosław Żeliński 12 maja 2021 at 12:32

      Fakt, temat na dłu­gą dys­ku­sję, dla­te­go ją tu prowokuję.

      Co do zasa­dy: nie łapie­my się za two­rze­nie opro­gra­mo­wa­nia jak wie­my komu i do cze­go ma słu­żyć, dla­te­go klu­czem jest opra­co­wa­ny spój­ny model pro­ce­su biz­ne­so­we­go, z któ­re­go od razu wiesz, że są tyl­ko dwa doku­men­tu: Karta książ­ki i Karta wypożyczenia. 

      Wstawienie daty zwro­tu to nie suge­ro­wa­nie roz­wią­za­nia a stwier­dze­nie fak­tu że tak to dzia­ła 🙂 (tu się kła­nia ontologia).

      Na tym eta­pie pra­cy (pro­jek­to­wa­nie) z zasa­dy trzy­mam się z dale­ka od bazy i SQL. Operują doku­men­tem. Jak ktoś nie nie potra­fi zapro­jek­to­wać sys­te­mu nie uży­wa­ją SQL to zna­czy, że ewen­tu­al­nie uży­wa AMAZON lub AZUR co naj­wy­żej jako hostingu… 

      Jak ja zapro­jek­tu­ję treść for­mu­la­rza i jego logi­kę (czy­li prze­te­stu­ję że wszyst­ko dzia­ła) o to UX może co naj­wy­żej doro­bić for­ma­to­wa­nie i kolo­ry, jak zmie­ni struk­tu­rę for­mu­la­rza to wyle­ci z projektu 🙂 

      Allegro (gene­ral­nie aukcje i sprze­daż) wbrew pozo­rom to kil­ka for­ma­tek i zło­żo­na lista reguł. Masz tam: Kartę pro­duk­tu, Kate klien­ta, Kartę sprze­daw­cy, Koszyk, Kartę zamó­wie­nia, List prze­wo­zo­wy, Kartę płat­no­ści. Właśnie pro­jek­tu­ję kolej­ny taki system… 

      Mikroserwisy to temat rze­ka, ja się trzy­mam sta­rej zasa­dy, mikro­ser­wis to samo­dziel­ny kom­po­nent reali­zu­ją­cy okre­ślo­ną usłu­gę, te zaś z regu­ły zarzą­dza­ją doku­men­ta­mi (ale nie zawsze). Jak każ­dy gada do każ­de­go to jest to dra­mat projektanta :). 

      Określenie dostęp­no­ści książ­ki lub jej rezer­wa­cji jest banal­nie pro­ste: w biblio­te­ce ope­ru­je­my ich egzem­pla­rza­mi, bo każ­da ma uni­kal­ny numer indek­su. Model dzie­dzi­ny, w któ­rym masz książ­kę i jej ilość jako jej cechę (atry­but), jest chy­ba naj­gor­szy z moż­li­wych. 😉 Ja nie mie­wam takich katastrof ;).

    • Jarosław Żeliński 12 maja 2021 at 18:16

      Pytasz „? czy robi­my coś, co z góry wia­do­mo jak dzia­ła, ma dzia­ła tak samo, tyl­ko w nowym sys­te­mie, bo nowy będzie lep­szy (pyta­nie po co nowy, sko­ro ma dzia­łać tak samo)”

      Rzecz w tym, że w zna­ko­mi­tej więk­szo­ści ma wła­śnie dzia­łać tak samo: nadal tak samo liczy­my kary, nadal tak samo kon­tro­lu­je­my dostęp, nadal tak samo przyj­mu­je­my i bra­ku­je­my zaso­by, itp.… para­dok­sal­nie opro­gra­mo­wa­nie to co do zasa­dy nie coś nowe­go” a coś wydaj­niej­sze­go”. Oprogramowanie (kom­pu­ter) to tyl­ko szyb­sze i bar­dziej nie­za­wod­ne narzę­dzie… Nawet jeże­li ludzie cze­goś nie robią bez kom­pu­te­ra, to nie dla­te­go, że nie wie­dzą jak, a dla­te­go, że nie potra­fią tak szyb­ko liczyć…

    • Jarosław Żeliński 14 maja 2021 at 10:16

      Obawiam się, że Feature Envy” to kla­sy­ka pro­ble­mu SQL – Dane-w-bazie (oraz zbyt głę­bo­ko zagnież­dża­nych, opa­słych agre­ga­tów)… Dlatego ja zawsze mam dodat­ko­we atry­bu­ty na okre­ślo­ne wyli­czo­ne dane: np. kla­sy­ka w posta­ci obiekt DaneOsoby ma nie tyl­ko atry­but data_urodzenia ale tak­że atry­but wiek, dzię­ki cze­mu dość czę­ste pyta­nie o wiek nie powo­du­je koniecz­no­ści każ­do­ra­zo­we­go wyko­na­nia jego wyli­cze­nia na pod­sta­wie daty uro­dze­nia i aktu­al­nej daty, wiek jest wyli­cza­ny raz w roku i zapi­sy­wa­ny. Moim zda­niem Feature Envy” to klu­czo­wy efekt usu­wa­nia redun­dan­cji gdzie tyl­ko się da. Zresztą od kil­ku­na­stu lat nie uży­wam już mode­lu rela­cyj­ne­go w projektach :).

      A tu dra­mat, któ­ry widu­ję regu­lar­nie w tym co mi pro­po­nu­ją deve­lo­pe­rzy (get/set dla każ­de­go atry­bu­tu) i lekarstwo:
      https://​mar​tin​fow​ler​.com/​b​l​i​k​i​/​T​e​l​l​D​o​n​t​A​s​k​.​h​tml

  4. Jarosław Żeliński 12 maja 2021 at 13:27

    doda­no Regulamin Biblioteki oraz opis logi­ki wyko­na­nia rezer­wa­cji książ­ki, roz­wią­zu­je to tak­że wyma­ga­nie róż­ne­go roz­po­rzą­dza­nia egzem­pla­rza­mi: np. osob­ne regu­ły dla jed­ne­go pod­pi­sa­ne­go egzemplarza.

  5. Jarosław Żeliński 13 maja 2021 at 22:25

    Aktualizacja: doda­no dia­gram aktyw­no­ści obra­zu­ją­cy logi­kę reali­za­cji aktu­ali­za­cji Regulaminu Biblioteki

  6. Jarosław Żeliński 24 maja 2021 at 15:35

    Dodano opis wyma­gań pozafunkcjonalnych.

  7. Jarosław Żeliński 20 czerwca 2021 at 19:25

    Dodano poglą­do­we mode­le integracji.

  8. Jarosław Żeliński 30 stycznia 2022 at 10:13

    Ktoś tu napi­sał: Ciężko prze­ło­żyć to na kod”. Słysze to dość czę­sto. Na czym pole­ga ta trudność?

    • Sławek Sobótka 30 stycznia 2022 at 15:53

      Ciężko pre­su­po­nu­je, że jed­nak się da:) Faktycznie da się, ale np. ani żaden z moich eks­per­tów by się tego nie pod­jął. Powodem jest ryzy­ko nie­po­wo­dze­nia. To co na razie mamy opra­co­wa­ne, to spro­wa­dze­nie pro­ble­mu do pro­ble­mu kla­sy obieg doku­men­tu – uprosz­czo­ny ale jed­nak. System wyglą­da jak zbie­racz­ka danych (tych doku­men­tów) z for­mu­la­rzy. I ok, być może tak dzia­ła ten kon­kret­ny biz­nes. Wtedy typo­wy softwa­re­ho­use zro­bi to cru­dem i prak­ty­kan­ta­mi;) Ale z cza­sem poja­wią się regu­ły, któ­rych tu nie widać. Nie wia­do­mo jak to modu­la­ry­zo­wać, na pew­nie nie naiw­nie ver­ti­cal sli­ce po pro­ce­sach czy po rzeczownikach.

    • Jarosław Żeliński 30 stycznia 2022 at 18:36

      Bo ten (taki) sys­tem to zbie­racz­ka danych, jak zna­ko­mi­ta więk­szość sys­te­mów. Logika ma dwa poziomy:
      – pro­sty, pole­ga­ją­cy na wali­da­cji tre­ści pól (to ich definicje)
      – dzie­dzi­no­wy, czy­li związ­ki mię­dzy war­to­ścia­mi pól tego same­go lub odręb­nych dokumentów

      Np. mając pole Data wypo­ży­cze­nia i Data zwro­tu, oraz Wysokość kary (Regulamin) mogę napisać:
      [kara za zwło­kę] = jeże­li ([data zwro­tu] – [data wypo­ży­cze­nia]) > limit dni, to * [staw­ka dzien­na za zwłokę]
      to logi­ka dzie­dzi­no­wa. Dodam, że logi­ka dzie­dzi­no­wa to tak­że taką jest zasa­da [data zwro­tu] – [data wypo­ży­cze­nia] >= 0
      Tą meto­dą moż­na opi­sać dowol­ną logi­kę na pozio­mie doku­men­tów i ich tre­ści, cał­ko­wi­cie poza bazą.

    • Jarosław Żeliński 1 lutego 2022 at 12:22

      Udostępniam plik PDF bez­płat­nie w ramach roz­wo­ju tej dyskusji.

  9. Jarosław Żeliński 2 lutego 2022 at 14:37

    (jeże­li ktoś z pań­stwa ma pro­blem z pobra­niem plik to pro­szę o kontakt)

Dodaj komentarz

Twój adres email nie zostanie opublikowany

Komentuj i zadawaj pytania autorowi.

Identyfikator *
E-mail *
Witryna internetowa

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.