encapsulation

在类中放入什么函数

如果我有一个函数(比如 messUp 不需要访问类的任何私有变量(比如 room),我应该像 room.messUp() 那样在类内编写函数还是像 @ 那样在类外编写函数987654324@? 似乎第二个版本对我来说更好读。... »

接受默认序列化时如何破坏封装?

我经常听到人们说序列化破坏了封装,而这种封装的丢失可以通过提供自定义序列化在一定程度上最小化。有人可以提供一个具体的例子来证明由于默认序列化而导致的封装损失是合理的,以及如何通过使用自定义序列化来最小化这种损失? 我将此问题标记为与 Java 相关,但答案可能与语言无关,因为我认为这是跨平台和语言的常见问题。 ... »

如何封装数据库访问?

我正在使用 .NET 开发一个事务性应用程序,并希望获得一些关于如何正确封装数据库访问的意见,以便: 我没有所有的连接字符串 在这个地方 多次调用同一个存储 不同功能的程序 或更糟,多次存储 不同的程序 单列 我很想知道使用像 NHibernate 这样的 ORM 是否有用,因为它可能只会给快速变化的数据模型增加另一层复杂性,并且需要在紧迫的时间内生成工件。 我对 ORM 包以外的方法或... »

使用宏保持结构字段可见性

我正在尝试编写一个 Rust 宏,它允许我使用结构声明的字段名称和类型,但我仍然需要发出结构。 我已经让它与可选属性、结构的可见性一起使用(感谢The Little Book of Rust Macros),但无法弄清楚如何处理各个字段中pub 的可选存在。 到目前为止,我得到了: macro_rules! with_generic { ($(#[$struct_meta:meta... »

在 NetBeans 8 中封装 JavaFX 属性?

这是我在 StackOverflow 上的第一个问题,所以我希望这不是一个愚蠢的问题 :-) 有没有办法在 NetBeans 8 中自动封装 JavaFX 属性? 假设我们要封装这个字段: private SimpleIntegerProperty id; 当我进入 Refactor > Encapsulate Fields 时,我得到这些行: public SimpleIntegerP... »

向外界隐藏内部服务以确保使用正确的高级服务[关闭]

我正在开发一个电子商务网站。我有包含属性和照片的广告实体。属性写入数据库,照片存储在文件系统中。 我在我的基础设施项目中创建了一个WriterService,该服务负责保存广告......在后台它应该知道属性转到数据库,照片转到文件系统......但是这个细节是与外界无关...外界应使用WriterService保存广告。 这是我的作家服务: public class WriterServ... »

c#

默认声明的属性? (状态设计模式)

我有 Prince 和 Frog 类(两者都是 State(它是虚拟的)的孩子,并且声明的方法 welcome() 和 sayGoodbye() 略有不同 我唯一的问题是为什么State* m_state 不公开? (它是默认的吗?——那是什么意思?)代码是 100% 好的,但是在老师给我们有关设计模式的材料之前,我从未见过这样的声明。 Monster.h class Monster{ ... »

c++

如何封装仅在另一个类中使用的类?

下图是程序的大致结构。 class Room { private: Node* content; public: void someRoomMethod(); }; void Room::someRoomMethod() {} class Node { private: Node* nextNode; std::variant<int, float&g... »

c++

在 C++ 中,给定类 A 中的一个成员函数,我们是否可以限制它只访问类 B,而不给 B 对 A 的完全朋友访问权限? [复制]

可能重复:clean C++ granular friend equivalent? (Answer: Attorney-Client Idiom) 我已经想了好几次了,但一直没能想出一个体面的方法来做到这一点。 假设我在 A 类中有一个成员函数。我希望能够从不相关的 B 类调用该函数,但通常不能调用。您可能会说,“当然,将函数设为私有并声明 B 为 A 的朋友。”这就是我一直在做的,但... »

c++

有什么理由使用自动实现的属性而不是手动实现的属性?

我了解 PROPERTIES 相对于 FIELDS 的优势,但我觉得使用 AUTO 实现的属性而不是 MANUAL 实现的属性并没有真正提供任何优势,只是让代码看起来更简洁一些。 我觉得使用起来更舒服: private string _postalCode; public string PostalCode { get { return _postal... »

c#

了解类的地图字段上的最终静态使用

我是一名 c++ 开发人员,正在努力熟悉核心 Java 概念。 我发现这令人困惑,因为我的最终静态是在构造对象后无法更改的东西。 (如果我错了,请纠正我) 我遇到了下面的实现,我觉得很困惑,因为它似乎允许将值添加到 Map 中,即使它是最终静态的 public class MockUserServiceImpl implements UserService { private sta... »

更喜欢非成员非朋友函数......在Java中? [关闭]

免责声明:这个问题是针对那些认为 Scott Meyers 在有效 C++ 的第 23 条中的建议是良好的 OO 设计的人——至少在 C++ 中是这样。 在不存在全局函数的 Java 中,这个原则起初似乎不适用,但在我看来确实适用。以 Scott Meyers 自己为例。 public class WebBrowser { public void clearCache() {} ... »

框架时代的封装

在我以前的 C++ 工作中,我们总是非常小心地封装成员变量,并且仅在绝对必要时才将它们公开为属性。我们会有非常具体的构造函数来确保您在使用对象之前完全构造它。 如今,使用 ORM 框架、依赖注入、序列化等,您似乎最好只依赖默认构造函数并在属性中公开有关您的类的所有内容,以便您可以注入东西,或者更动态地构建和填充对象。 在 C# 中,对象初始化器更进一步,它使您能够基本上定义自己的构造函数。 (... »

如何从 C# 中的接口隐藏已实现属性的 set 方法?

大家好…… 如果我有如下界面: interface IMyInterface { int property { get; set; } } 以及以下实现: class MyClass : IMyInterface { // anything } 如何从MyClass 的实例中隐藏set 的属性方法... 换句话说,我不希望property 的set 方法公开,这可能吗? ... »

c#

无法从派生类型的范围访问另一个实例的受保护成员

在this answer 的问题“为什么我的对象不能访问公共基类中定义的另一个对象的受保护成员?”,可以阅读: 您只能从您自己的基类实例中访问受保护的成员。 要么我没有正确理解它,要么following MCVE (live on coliru) 证明它是错误的: struct Base { void f(); protected: int prot; }; st... »

c++

Python中的封装

考虑一个 Employee 类 class Employee: def __init__(self, name, salary): self.name = name self.salary = salary emp_obj = Employee('Sam', 50000) print(emp_obj.name, emp_obj.salary) 我尝试... »

PHP OOP - 从两个函数返回 lastInsertId

我是 OOP 新手,对返回具有相同变量名的函数有疑问,例如: class CompanyManager { function createCompany() { // PDO - create the company return $db->lastInsertId(); } function createCompanyContact(... »

php

具有类冲突的Angular2 css文件

我使用 2 个 css 文件,但在这两个文件中,我有一个同名的类...我在一个组件中使用一个,第二个在另一个组件中使用。 如何使用这些 CSS 文件不再有冲突? 提前谢谢! ... »

css