Вопросы с тегом «class-design»

Общие рекомендации о том, как разрабатывать классы с использованием лучших известных отраслевых практик.

16
При использовании принципа единой ответственности, что представляет собой «ответственность»?
Кажется довольно ясным, что «принцип единой ответственности» не означает «только одно». Вот для чего нужны методы. public Interface CustomerCRUD { public void Create(Customer customer); public Customer Read(int CustomerID); public void Update(Customer customer); public void Delete(int CustomerID); } Боб Мартин говорит, что «у классов должна быть только одна причина измениться». Но …

9
Есть ли «реальная» причина, по которой множественное наследование ненавидят?
Мне всегда нравилась идея поддержки множественного наследования в языке. Чаще всего это преднамеренно, и предполагаемая «замена» - это интерфейсы. Интерфейсы просто не охватывают все то же основание, что и множественное наследование, и это ограничение может иногда приводить к дополнительному шаблонному коду. Единственная основная причина, которую я когда-либо слышал для этого, …

13
Как предупредить других программистов о реализации классов
Я пишу классы, которые «должны использоваться особым образом» (я думаю, все классы должны ...). Например, я создаю fooManagerкласс, который требует вызова, скажем, Initialize(string,string). И, чтобы продвинуть пример немного дальше, класс был бы бесполезен, если бы мы не слушали его ThisHappenedдействие. Я хочу сказать, что класс, который я пишу, требует вызовов …

12
Это плохая практика, чтобы пропустить экземпляры через несколько слоев?
При разработке моей программы я часто дохожу до того, что мне приходится передавать экземпляры объекта через несколько классов. Например, если у меня есть контроллер, который загружает аудиофайл, а затем передает его проигрывателю, а проигрыватель передает его в playerRunnable, который снова передает его в другое место и т. Д. Это выглядит …

6
Должен ли получатель генерировать исключение, если его объект имеет недопустимое состояние?
Я часто сталкиваюсь с этой проблемой, особенно в Java, даже если я думаю, что это общая проблема ООП. То есть: поднятие исключения выявляет проблему дизайна. Предположим, что у меня есть класс, который имеет String nameполе и String surnameполе. Затем он использует эти поля, чтобы составить полное имя человека, чтобы отобразить …

6
Что может быть недостатком для определения класса как подкласса списка самого себя?
В моем недавнем проекте я определил класс со следующим заголовком: public class Node extends ArrayList<Node> { ... } Однако, после обсуждения с моим профессором CS, он заявил, что урок будет «ужасным для памяти» и «плохой практикой». Я не обнаружил, что первое особенно верно, а второе субъективно. Мое обоснование такого использования …

6
Предпочитаете членов класса или передавать аргументы между внутренними методами?
Предположим, что в частной части класса есть значение, которое используется несколькими частными методами. Предпочитают ли люди определять это как переменную-член для класса или передавать его в качестве аргумента каждому из методов - и почему? С одной стороны, я мог бы привести аргумент, что сокращение состояния (т.е. переменных-членов) в классе, как …

4
Почему предпочитают нестатические внутренние классы статическим?
Вопрос в том, сделать ли вложенный класс в Java статическим вложенным классом или внутренним вложенным классом. Я искал здесь и на Stack Overflow, но не смог найти никаких вопросов, касающихся последствий этого решения для дизайна. Я нашел вопросы о разнице между статическими и внутренними вложенными классами, что мне ясно. Однако …

9
Является ли создание подклассов для конкретных случаев плохой практикой?
Рассмотрим следующий дизайн public class Person { public virtual string Name { get; } public Person (string name) { this.Name = name; } } public class Karl : Person { public override string Name { get { return "Karl"; } } } public class John : Person { public override …

5
Это хорошая практика для создания ClassCollection другого класса?
Допустим, у меня есть Carкласс: public class Car { public string Engine { get; set; } public string Seat { get; set; } public string Tires { get; set; } } Допустим, мы создаем систему для парковки, я собираюсь использовать много Carклассов, поэтому мы создаем CarCollectionкласс, который может иметь несколько …

5
Когда и зачем использовать вложенные классы?
Используя объектно-ориентированное программирование, у нас есть возможность создать класс внутри класса (вложенный класс), но я никогда не создавал вложенный класс за 4 года своего опыта программирования. Для чего нужны вложенные классы? Я знаю, что класс может быть помечен как закрытый, если он вложенный, и что мы можем получить доступ ко …

3
Необязательные параметры или перегруженные конструкторы
Я реализую DelegateCommand, и когда я собирался реализовать конструктор (ы), я предложил следующие два варианта дизайна: 1: Наличие нескольких перегруженных конструкторов public DelegateCommand(Action<T> execute) : this(execute, null) { } public DelegateCommand(Action<T> execute, Func<T, bool> canExecute) { this.execute = execute; this.canExecute = canExecute; } 2: Наличие только одного конструктора с необязательным …

10
Можем ли мы жить без конструкторов?
Допустим, по какой-то причине все объекты созданы таким образом: $ obj = CLASS :: getInstance (). Затем мы внедряем зависимости с помощью сеттеров и выполняем начальную инициализацию с помощью $ obj-> initInstance (); Есть ли реальные проблемы или ситуации, которые нельзя решить, если мы вообще не будем использовать конструкторы? Причиной …

5
Должен ли класс знать о своих подклассах?
Должен ли класс знать о своих подклассах? Должен ли класс делать что-то специфичное для данного подкласса, например? Мои инстинкты говорят мне, что это плохой дизайн, это похоже на какой-то анти-паттерн.

2
Является ли хорошей идеей предоставлять разные сигнатуры функций, которые делают одно и то же?
Вот класс C ++, который создается с тремя значениями. class Foo{ //Constructor Foo(std::string, int, char); private: std::string foo; char bar; int baz; }; Все типы параметров разные. Я мог бы перегрузить конструктор, чтобы порядок не имел значения. class Foo{ //Constructors Foo(std::string, char, int); Foo(std::string, int, char); Foo(char, int, std::string); Foo(char, …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.