Vezesse kontrollereit és modelljeit a Sébastien Carceles Dev on Rails Medium diétájára

Vagy az üzleti kód és a keretrendszer kódjának leválasztása az Interactors használatával.

kontrollereit

A projekt növekszik. Apránként a kontrollerek és a modellek felelősek az üzleti műveletek végrehajtásáért. Piszkosak. Az üzleti kód keveredik a keretrendszer kódjával.

Ez a "zsírkontrollerek/zsírmodellek" nevű jelenség, és egyértelmű mutatója annak, hogy a projektet gyorsan nehéz fenntartani és méretezni.

Azt azonban tudjuk, hogy:

  • az adatkezelőnek csak az ügyfélkéréseket kell feldolgoznia
  • a modellnek csak az adatok tartósságáról kell gondoskodnia

Hasonló kód található sok projektben. A fenti példában a vezérlő létrehozási művelete felhalmozza a felelősségeket:

  • példányosítson egy Vállalatot
  • használjon harmadik féltől származó szolgáltatást
  • gazdagítsa a Társaságot
  • kezelni a hibákat a harmadik fél szolgáltatásának vagy az adatok érvényesítésének meghibásodása esetén
  • értesítse a menedzsert e-mailben a siker esetén
  • válasz a felhasználónak

Ezt a problémát, amelyet összefoglalhatunk a következővel: „Látom-e a problémát, de-hova kell akkor beírnom a kódomat?”, Számos tervezési minta foglalkozik. Amikor üzleti műveletekről beszélünk (és az üzleti műveletek általában többé-kevésbé összetett utasítások sorozatából állnak), valószínűleg a legegyszerűbb és leghatékonyabb minta az Interactor. Lehet, hogy már üzleti vagy szolgáltatási objektumként ismeri.

Ez a minta egy üzleti művelet elkülönítését javasolja egy tiszta Ruby osztályban, egyértelmű névvel (vagyis ami kifejezi a végrehajtott műveletet). Szerepe ennek az üzleti műveletnek a végrehajtása, és semmi más.

Itt hozhatunk létre például egy CreateCompany nevű interaktort, amelynek feladata tehát egy vállalat létrehozása. Ehhez végrehajtja a fent felsorolt ​​lépéseket és kezeli a határeseteket.

Ez leegyszerűsíti a vezérlőt, amely ennek az osztálynak az ügyfelévé válik:

Phew, már jobban lélegzünk.

Hozhatnánk létre a CreateCompany osztályt a semmiből. Meg kell határoznunk egy közös keretrendszert minden interaktorunk számára, vagyis egy közös API-t, hogy a projekt összes interaktora ugyanúgy használjon és viselkedjen.