Autor Téma: Prerušenie závislosti dvoch jednotiek  (Přečteno 121 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6472
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Prerušenie závislosti dvoch jednotiek
« kdy: 11-05-2022, 18:28:50 »
Je to na základe tejto témy "Prepíšem si v prípade 2) premennú?"
  • Formulár sa odvoláva na jemu priradenú jednotku. Tera tu mám premenné pre triedy
  • Jednotka sa odvoláva na formulár. Tu mám definované triedy
Samozrejme, že to riešim klasicky. Použitím uses raz v interface a potom v implementation.
Dá sa to vzájomné volanie nejako obísť? Jednoduché vloženie nejakej tretej jednotky, napr. pre inštancie tried, to nerieši. Kruh sa uzatvorí cez všetky tri jednotky.
Z pohľadu programu sa nezmení nič. Len by som si zjednodušil a vyčistil prácu.
.
Alebo nech nevymýšľam hlúposti. Napíšte mi to priamo.
W10 64b, Delphi 11.1, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Offline starous

  • Plnoletý
  • ***
  • Příspěvků: 102
  • Karma: 3
    • Verze Delphi: Delphi 7, Delphi 10.4
Re:Prerušenie závislosti dvoch jednotiek
« Odpověď #1 kdy: 11-05-2022, 23:24:09 »
Mezi knihovnami, které jsou k dispozici v Delphi 11 přes GetIt, je také knihovna EventBus, která slouží k zasílání zpráv mezi objekty. Použití je poměrně jednoduché, jen je dobré to s množstvím zpráv nepřehánět. Přeci jen se to nekrokuje tak dobře jako přímé volání metody objektu.
Pro odstranění kruhové závislosti objektů by to mohla být dobrá cesta.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6472
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:Prerušenie závislosti dvoch jednotiek
« Odpověď #2 kdy: 12-05-2022, 08:22:29 »
Ďakujem za reakciu.
 Môj "problém" je v tom, že trieda pristupuje k formuláru. Mám v takom prípade chápať formulár ako objekt?
W10 64b, Delphi 11.1, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Offline starous

  • Plnoletý
  • ***
  • Příspěvků: 102
  • Karma: 3
    • Verze Delphi: Delphi 7, Delphi 10.4
Re:Prerušenie závislosti dvoch jednotiek
« Odpověď #3 kdy: 12-05-2022, 09:40:32 »
Ďakujem za reakciu.
 Môj "problém" je v tom, že trieda pristupuje k formuláru. Mám v takom prípade chápať formulár ako objekt?
Ano, i formulář je potomkem TObject. Oni ty kruhové závislosti se dají přežít. Problém je, že pak všechno na všem závisí a nemůžeš ten program nějak rozumně rozdělit na části.
Nevím, jak to máš postavený, ale předpokládám, že formulář ovládá ten objekt a pokud objekt potřebuje něco předat zpět formuláři, tak mu prostě pošle zprávu. Výhodou je, že tu zprávu nemusí zachytávat jen ten jeden formulář, ale i další části programu. Ale nepřehánět. Kdyby tam lítaly jen zprávy mezi objekty, bude problém s laděním.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6472
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:Prerušenie závislosti dvoch jednotiek
« Odpověď #4 kdy: 12-05-2022, 10:20:49 »
V mojom prípade to je jednoduché.
  • Formulár používa pre svoju obchodnú logiku rutiny triedy
  • Trieda nastavuje vlastnosti niektorých komponentov formulára. Typicky "Enabled"
Ja teraz nemám praktický problém. Keďže to sú len dve jednotky, tak kruhová závislosť z pohľadu programovania tam nie je. Je tam z pohľadu logiky. Len som si myslel, žeby sa to dalo obísť. So správami neviem robiť :-[  Najlepšie bude to nechať tak ako to je.
W10 64b, Delphi 11.1, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.