Yii Framework Forum: Refaktoryzacja Kodu - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Refaktoryzacja Kodu Rate Topic: -----

#1 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 19 December 2013 - 02:41 PM

Witam. Ostatnio udało mi się skończyć nad pewnym projektem, jednak kod aplikacji mnie nie zadowala. Co prawda wszystko poszło dużo łatwiej i sprawniej (pierwsza aplikacja po pisaniu strukturalnym), jednak akcje w kontrolerach są długie. Niektóre, aż po 200 lini, co strasznie utrudnia zarządzanie i jakiekolwiek modyfikacje, bo reszta zaczyna się sypać. Postanowiłem teraz wszystko zrefaktoryzować, jednak nie jestem do końca pewny jak to zrobić. W kontrolerach ma być sama logika, więc żeby nie było syfu, wszystkie operacje na modelach powinienem opakować w metody i umieścić w modelach?
0

#2 User is offline   nineinchnick 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 622
  • Joined: 12-September 11
  • Location:Bialystok, Poland

Posted 19 December 2013 - 03:09 PM

Ja proponuję spróbować pisać testy jednostkowe. Wtedy sam zobaczysz, jak refaktorować metody tak, aby dały się testować. Testowalne metody łatwo się czyta i modyfikuje w przyszłości. Zresztą zalet testów jest dużo więcej.

To czy logika jest głównie w kontrolerach czy w modelach nie ma większego znaczenia, ważne, żeby kod był odpowiednio podzielony na metody, okomentowany i zrozumiały dla innych i dla ciebie z przyszłości.

Jak mi się zdarzy coś popełnić to piszę komentarze z przeprosinami dla mojego przyszłego ja :-P

Mam jeszcze jedną zasadę - jak metoda nie mieści ci się na ekranie to znaczy, że powinna zostać podzielona na kilka mniejszych. To wynika z praktyki, żebyś dał radę objąć wzrokiem blok kodu i wiedzieć co on robi, nie zapomnieć początku czytając dalej.
Don't be a dick.
2

#3 User is offline   kradam 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 17
  • Joined: 22-October 12

Posted 20 December 2013 - 03:16 AM

@nineinchnick wydaje mi się, że większość świata ma inne zdanie na temat umieszczania logiki w aplikacjach MVC. Generalnie nie jestem osobą podążającą za tłumem, ale ten pogląd moje osobiste doświadczenia w pełni popierają. Nie widzę sensu dyskutować o tym, choćby na SO można znaleźć mnóstwo wątków typu "fat M, thin C."
0

#4 User is offline   nineinchnick 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 622
  • Joined: 12-September 11
  • Location:Bialystok, Poland

Posted 20 December 2013 - 04:36 AM

Inne od czego? Napisałem, że nie ma znaczenia, czy logika jest w modelach czy w kontrolerach.

Osobiście też jestem za cienkimi kontrolerami. Gruby model też nie jest do końca dobry i wskazuje na to, że trzeba dalej reorganizować kod używając dziedziczenia, komponentów, behaviors z Yii czy innych praktyk i wzorców.

Koniec końcem to kod jest dla ludzi a nie ludzie dla kodu, więc nie mamy go podziwiać ale przede wszystkim rozumieć.
Don't be a dick.
1

#5 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 21 December 2013 - 02:33 AM

Na razie niestety nie mogę robić testów jednostkowych, gdyż mam problem z zainstalowaniem PHPUnit na hostingu. Ale udało mi się poprawić większość kodu i zaczyna się coś rozjaśniać :) Pojawił się mi tylko jeden dylemat, przykładowo:
model:
public function activate()
{
   $this->activated='1';
   $this->save();
}


kontroler:
...
$user=$this->loadModel($id,'User');
$user->activate();
...


VERSUS

model:
public static function activate($id)
{
   $user=$this->loadModel($id,'User');
   $uesr->activated='1';
   $user->save();
}


kontroler:
...
User::activate($id)
...


Nie wiem czy przyjąć jeden sposobów i stosować go konsekwetnie? Bo jak narazie mam zamieszanie i często muszę sprawdzać czy do funkcji mam się odwoływać przez model czy też nie.
0

#6 User is offline   nineinchnick 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 622
  • Joined: 12-September 11
  • Location:Bialystok, Poland

Posted 21 December 2013 - 02:43 AM

Testy możesz odpalać u siebie, powinny być niezależne od środowiska.

Unikałbym statycznych metod jeśli można. Load model rzuca chyba wyjątek http 404 jak nie załaduje modelu, więc, wystarczy coś takiego:
$user=$this->loadModel($id,'User')->activate();

Don't be a dick.
0

#7 User is offline   !*! 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 30-January 14

Posted 30 January 2014 - 01:04 PM

Cześć,

powiedzcie, czy są jakieś gotowe usprawnienia zaimplementowane w yii umożliwiające łatwe odśmiecanie kodu?. Chodzi mi o model w którym to definiuje się relację, reguły, metody reguł, label pól formularza, zdarzenia modelu,settery,gettery i kryteria wyszukiwania?. Jak dla mnie zdecydowanie za dużo, czy są jakieś klas specjalistycznych do chodź by tworzenia reguł, zarządzania modelem w mapowaniu go na formularz itp.
0

#8 User is offline   nineinchnick 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 622
  • Joined: 12-September 11
  • Location:Bialystok, Poland

Posted 31 January 2014 - 11:44 AM

Przytoczę Yii 2 gdzie chociażby scope zostały wyodrębnione do samodzielnej klasy, tzn nie można ich definiować w modelu AR.

W Yii 1 możesz przenieść część logiki modelu do behaviorów, w których można też obsługiwać zdarzenia.

Etykiety w modelu można traktować jako błąd projektowy ale mi specjalnie nie przeszkadzają, ich definicja jest dość zwarta i zwykle się ich nie tyka.

Jeśli potrzebne są dokładniejsze wywody na takie tematy musimy to omawiać na bardziej konkretnych przykładach.
Don't be a dick.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users