Запитання з тегом «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
Чи погана практика передавати екземпляри через кілька шарів?
У своєму дизайні програми я часто приходжу до того, що мені доводиться передавати екземпляри об'єктів через кілька класів. Наприклад, якщо у мене є контролер, який завантажує аудіофайл, а потім передає його програвачеві, а плеєр передає його програвачевіRunnable, який передає його знову кудись інше і т. Д. Це виглядає погано, але …

6
Чи повинен геттер кидати виняток, якщо його об’єкт має недійсний стан?
Я часто стикаюся з цією проблемою, особливо на Java, навіть якщо вважаю, що це загальна проблема OOP. Тобто: підвищення винятку виявляє проблему дизайну. Припустимо, у мене є клас, який має String nameполе і String surnameполе. Потім він використовує ці поля для складання повного імені людини для того, щоб відобразити його …

6
Що було б недоліком у визначенні класу як підкласу самого списку?
У недавньому моєму проекті я визначив клас із таким заголовком: public class Node extends ArrayList<Node> { ... } Однак, обговоривши з моїм професором CS, він заявив, що і клас буде "жахливим для пам'яті" та "поганою практикою". Я не вважав, що перша є особливо правдивою, а друга - суб’єктивною. Моє міркування …

6
Віддайте перевагу членам класу або передаючи аргументи між внутрішніми методами?
Припустимо, у приватній частині класу є значення, яке використовується декількома приватними методами. Чи вважають за краще люди визначати це як змінну члена для класу або передавати його як аргумент кожному з методів - і чому? З одного боку, я міг бачити аргумент, що зменшення стану (тобто змінних членів) у класі, …

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 …

4
Чому віддають перевагу нестатичним внутрішнім класам над статичним?
Це питання стосується того, щоб зробити вкладений клас у Java статичним класом вкладених або внутрішнім вкладеним класом. Я шукав тут і в Stack Overflow, але насправді не міг знайти жодних питань щодо дизайнерських наслідків цього рішення. Я знайшов запитання про різницю між статичними та внутрішніми вкладеними класами, що мені зрозуміло. …

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: Маючи лише один конструктор з необов'язковим параметром public …

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.