Строго ли соблюдение принципа единой ответственности нарушает инкапсуляцию? - PullRequest
5 голосов
/ 09 июня 2011

Кажется, что если я строго придерживаюсь принципа единой ответственности, то мне, возможно, придется добавить общедоступные методы получения, чтобы разделить функциональные возможности, которые могут измениться. Мне кажется, это нарушает инкапсуляцию, обнажая внутреннюю структуру объектов.

Например, предположим, у меня есть класс, который представляет загруженный файл. В прошлом я использовал такие методы, как toHtml (), чтобы избежать геттеров и поддерживать инкапсуляцию:

public class UploadedFile() {
  private String filename;
  private String uri;
  public String toHtml() {
    return <html string>;
 }

Но я мог видеть, где можно утверждать, что, основываясь на SRP, вы можете включить геттеры для имени файла и uri и генерировать html в другом месте.

1 Ответ

1 голос
/ 09 июня 2011

В этой ситуации filename и uri будут свойствами вашего UploadedFile() класса, которые было бы нелогично скрывать, поэтому, по моему мнению, предоставление получателей для них вообще не нарушает инкапсуляцию.

Нарушение инкапсуляции произойдет, если вы сделаете filename и uri открытыми полями и просто получите к ним прямой доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...