Вопросы с тегом «encapsulation»

6
Метод цепочки против инкапсуляции
Существует классическая проблема ООП цепочки методов по сравнению с методами с одной точкой доступа: main.getA().getB().getC().transmogrify(x, y) против main.getA().transmogrifyMyC(x, y) Первый, кажется, имеет то преимущество, что каждый класс отвечает только за меньший набор операций и делает все намного более модульным - добавление метода к C не требует никаких усилий в A, …

5
Могу ли я использовать Dependency Injection, не нарушая инкапсуляцию?
Вот мое решение и проекты: Книжный магазин (решение) BookStore.Coupler (проект) Bootstrapper.cs BookStore.Domain (проект) CreateBookCommandValidator.cs CompositeValidator.cs IValidate.cs IValidator.cs ICommandHandler.cs BookStore.Infrastructure (проект) CreateBookCommandHandler.cs ValidationCommandHandlerDecorator.cs BookStore.Web (проект) Global.asax BookStore.BatchProcesses (проект) Program.cs Bootstrapper.cs : public static class Bootstrapper.cs { // I'm using SimpleInjector as my DI Container public static void Initialize(Container container) { container.RegisterManyForOpenGeneric(typeof(ICommandHandler<>), …


1
Использование классов-друзей для инкапсуляции закрытых функций-членов в C ++ - хорошая практика или злоупотребление?
Итак, я заметил, что можно избежать размещения частных функций в заголовках, выполнив что-то вроде этого: // In file pred_list.h: class PredicateList { int somePrivateField; friend class PredicateList_HelperFunctions; public: bool match(); } // In file pred_list.cpp: class PredicateList_HelperFunctions { static bool fullMatch(PredicateList& p) { return p.somePrivateField == 5; // or whatever …

3
Лучшие практики для использования публичного, защищенного, частного?
Справедливо ли говорить, что privateпри кодировании чего-либо является хорошей практикой по умолчанию все по умолчанию ? А затем обновите его только до того момента, protectedкогда это потребуется подклассу, или publicесли это понадобится другому классу?

5
Должен ли я всегда полностью инкапсулировать внутреннюю структуру данных?
Пожалуйста, рассмотрите этот класс: class ClassA{ private Thing[] things; // stores data // stuff omitted public Thing[] getThings(){ return things; } } Этот класс предоставляет массив, который он использует для хранения данных, любому клиентскому коду. Я сделал это в приложении, над которым я работаю. У меня был ChordProgressionкласс, который хранит …

4
Я страдаю от чрезмерного использования инкапсуляции?
Я заметил кое-что в своем коде в различных проектах, которое кажется мне запахом кода и чем-то плохим, но я не могу с этим справиться. Пытаясь написать «чистый код», я склонен чрезмерно использовать частные методы, чтобы облегчить чтение моего кода. Проблема в том, что код действительно чище, но его также сложнее …

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

4
Может ли переименование метода сохранить инкапсуляцию?
Я читал эту страницу о том, когда геттеры / сеттеры оправданы, и ОП дал следующий пример кода: class Fridge { int cheese; void set_cheese(int _cheese) { cheese = _cheese; } int get_cheese() { return cheese; } } void go_shopping(Fridge fridge) { fridge.set_cheese(fridge.get_cheese() + 5); } В признанных ответ гласит: Кстати, …

5
Как сделать так, чтобы к функции обращались извне?
Это специфический для С вопрос. Я пытаюсь сохранить все возможное в границах модуля перевода, раскрывая только несколько функций через .hфайл. То есть я даю staticсвязь с объектами на уровне файлов. Теперь пара функций должна вызываться другими модулями, но не напрямую. Мой модуль / файл / модуль перевода подписывается на другие …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.