Wyobraźmy sobie, że cała aplikacja nad którą chcemy pracować zbudowana jest tak, że nie ma żadnych referencji do bazy danych, żadnych referencji związanych ze sposobem wyświetlania, żadnych okienek, stron www… nic. Tylko klasę, która mogła by wyglądać tak:
[csharp]
public class MyGreatApplication
{
public IAbout About()
{
// zwraca informacje na temat aplikacji
}
public void LoadData(IApplicationData applicationData)
{
// wczytanie danych aplikacji
}
public ICalculatedTax CalculateTax(IDataToCalculateFrom inputData)
{
// obliczenie podatku
}
}
[/csharp]
Plus takiego podejścia to możliwość wymiany sposobu przechowywania danych na dowolne inne w bardzo krótkim czasie. Wzorzec IRepository ułatwi zbudowanie czegoś, co będzie działało jako wewnętrzne źródło danych, to co znajduje się po drugiej stronie nie ma już znaczenia dla samej aplikacji. Również sposób komunikacji ze światem nie ma zupełnie znaczenia. Najbardziej podstawowym mogą być testy jednostkowe. Może to być również aplikacja okienkowa np. WPF w połączeniu z MVVM lub ASP.NET MVC. Tak długo jak aplikacja będzie czysta od sposobu prezentacji oraz sposobu przechowywania danych, tak długo będziemy mogli elastycznie nimi żonglować.
Podstawową wartością biznesową jest nasza aplikacja. To tutaj jest miejsce na logikę biznesową i na umieszczenie wszystkiego tego co chcemy aby aplikacja robiła. To jak dostarczymy tą aplikację użytkownikowi jest sprawą wtórną – dostarczymy w sensie jak użytkownik będzie konsumował nasz produkt.
Zwróć uwagę, że kilka lat temu większość aplikacji była dostępna w formie aplikacji okienkowej i taka forma konsumpcji była dobra dla większości użytkowników (wcześniej była to jedyna forma). Później pojawiło się coś co się nazywa “aplikacja webowa” (to dlaczego pojawiły się tutaj ząbki opiszę kiedyś w osobnej notce) a obecnie instalowana dedykowana aplikacja wraca do łask i ponownie zyskuje na popularności tyle tylko, że w formie aplikacji na platformy mobilne (iOS, Android, WP7). Wyobrażasz sobie koszty stworzenia aplikacji prawie od nowa przy pojawieniu się nowej technologii?
Proponowane wyżej podejście do budowania aplikacji pozwala bardzo niskim kosztem stworzyć nowy mechanizm konsumpcji naszej aplikacji – nawet co kilka miesięcy. Tak jak pisałem już wcześniej, bardzo niskim kosztem możemy zbudować na tym samym rdzeniu zarówno usługę sieciową jak i WPF-a, WP7 i formsy i Silverlighta – a może potrzebny jest gadget do Visty lub Windows 7? Za kilka miesięcy wyjdzie Windows 8 więc może warto zastanowić się nad wykorzystaniem nowych możliwości. Widzisz przewagę konkurencyjną? Zamiast przepisywać część aplikacji aby użyć nowej technologii i najzwyczajniej w świecie gonić konkurentów można zaoszczędzić czas inteligentnie budując kod.
Mam nadzieję, że zainspirowałem Cię wystarczająco aby zmienić ciągle niestety najpopularniejszy sposób pisania aplikacji.