Wiele dedykowanych i małych interfejsów jest lepsze niż jeden ogólny.
Otrzymuj najświeższe informacje
Chcesz otrzymywać najświeższe informacje? Podaj swój adres e-mail i zapisz się!
Dziękuję!
Wysłałem Ci wiadomość e-mail. Wejdź na swoją skrzynkę mailową proszę i potwierdź jak najszybciej swój adres e-mail.
Do usłyszenia!
Jak wykorzystywać w praktyce ISP?
Należy rozdzielać interfejsy na mniejsze i przyłożyć się do projektowania abstrakcyjnych elementów w aplikacji. Za granicę podziału najlepiej wybierać jest miejsce, które pozwala wydzielić obszary zgodne z zasadą pojedynczej odpowiedzialności. Każdy obszar powinien mieć jeden powód do zmiany. Powinien zmniejszać zależności i zwiększać spójność. Interfejsy powinny zawierać taki zbiór metod, aby klasy je implementujące nie musiały implementować metod, których nie chcą implementować.
Przykład
class Program
{
static void Main(string[] args)
{
IDataImporter reportImporter = new ReportImporter();
Console.WriteLine(reportImporter.GetDataFromPdf());
Console.WriteLine(reportImporter.GetDataFromExcel());
IDataImporter pictureImporter = new TableImporter();
Console.WriteLine(pictureImporter.GetDataFromPdf());
Console.WriteLine(pictureImporter.GetDataFromExcel());
}
}
internal class TableImporter : IDataImporter
{
public string GetDataFromExcel()
{
return "Table from Excel";
}
public string GetDataFromPdf()
{
//We do not return a table from pdf file
return string.Empty;
}
}
internal class ReportImporter : IDataImporter
{
public string GetDataFromExcel()
{
return "Report from Excel";
}
public string GetDataFromPdf()
{
return "Report from Pdf";
}
}
internal interface IDataImporter
{
string GetDataFromExcel();
string GetDataFromPdf();
}
Klasa TableImporter implementuje metodę, z której w ogóle nie korzysta. Lepiej jest oddzielić interfejs DataImporter na mniejsze interfejsy. Wtedy wszystkie klasy będą implementowały tylko to, co chcą.
class Program
{
static void Main(string[] args)
{
var reportImporter = new ReportImporter();
Console.WriteLine(reportImporter.GetDataFromPdf());
Console.WriteLine(reportImporter.GetDataFromExcel());
IExcelParser pictureImporter = new TableImporter();
Console.WriteLine(pictureImporter.GetDataFromExcel());
}
}
internal class TableImporter : IExcelParser
{
public string GetDataFromExcel()
{
return "Table from Excel";
}
}
internal class ReportImporter : IExcelParser, IPdfParser
{
public string GetDataFromExcel()
{
return "Report from Excel";
}
public string GetDataFromPdf()
{
return "Report from Pdf";
}
}
internal interface IExcelParser
{
string GetDataFromExcel();
}
internal interface IPdfParser
{
string GetDataFromPdf();
}
Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:
Strona wykorzystuje pliki cookies w celu obsługi jej poszczególnych funkcji oraz korzystania z narzędzi analitycznych (Google Analytics, HotJar), marketingowych (Google Ads, Facebook Pixel) oraz społecznościowych (Instagram, Facebook, Twitter, LinkedIN). Szczegóły: polityka prywatności. Jeżeli wyrażasz zgodę na pliki cookies, kliknij w przycisk „Akceptuję”. Jeżeli chcesz zarządzać ustawieniami plików cookies, kliknij Ustawienia. Akceptuję
Polityka prywatności i plików cookies
Privacy Overview
Ten serwis używa plików cookies w celu ulepszenia Twojego doświadczenia podczas korzystania z tego serwisu. Pliki cookies podzieliliśmy na obowiązkowe i nieobowiązkowe. Obowiązkowe są konieczne do poprawnego działania strony oraz przeglądarki. Z nieobowiązkowych możesz się wypisać. O polityce prywatności możesz przeczytać tutaj: Polityka prywatności.
Obowiązkowe pliki cookies są konieczne to poprawnego funkcjonowania strony. Są to pliki cookies odpowiedzialne za dostarczanie podstawowych funkcji oraz zapewnienie bezpieczeństwa strony. Te pliki nie zawierają informacji personalnych.