Programming to interfaces
сообщите нам, что наш код должен зависеть от интерфейсов, в то время как ISP
направляет нас не создавать интерфейсы богов, которые имеют большое количество методов. Большие интерфейсы вызывают две основных проблем:
- клиентов, использующих этот интерфейс в зависимости от методов, которые они не используют
- новых реализаций этого интерфейса должен реализовать все методы, и если интерфейс является большим, что не всегда ясно, как надлежащим образом реализовать этот интерфейс
OCP
направляет нас на то, чтобы написать код, который мы можем продлить без изменения существующего кода. Так, например, пусть предполагается, что вы следующий интерфейс:
public interface ITask
{
void Execute();
}
Затем вы создаете SendToEmailTask
класс, который реализует интерфейс ITask
. Предположим, что через некоторое время появляется новое требование о необходимости добавления журнала в SendToEmailTask
. И в соответствии с OCP
вы не должны изменять существующий код, а добавить новый LoggingTask
, который также реализует ITask
интерфейс (используя Decorator
рисунок):
public class LoggingTask : ITask
{
private readonly ITask task;
public LoggingTask(ITask task)
{
//guard clause
this.task = task;
}
public void Execute()
{
Logger.Log("task...");
this.task.Execute();
}
}
Благодаря тому, что вы достигли Single Responsibility
принципа.
хорошо предположим, что у меня есть класс конечно и сообщений класса и есть IFetchable, IUploadable, класс конечно два интерфейсных воплощали только я Fetchable и пост реализует как так я сделал класс это для управления операциями http://pastebin.com/nJx6C38g я думаю, что он может быть реализован на основе OCP, как сделать выборку класса есть метод извлечения и загрузить класс загрузить методу и сделать класс выглядеть следующим образом управлять операциями http://pastebin.com/9FRX2XK1 извините, но это что я понял: / – MrDroid