2

这是我职业生涯中的第一次,我必须向客户交付一个 DLL,其中包含我们的基础、通用软件和一个接口,使其按照客户想要的方式工作 + 允许客户输入输入并读取输出。

现在我最大的问题是,由于知识产权的原因,我可能不会向我的客户展示他绝对不需要知道的任何内容。这包括数据类型,因此我什至无法向他展示我们任何内部方法的签名。我创建了模仿我们自己内部的数据类型和结构,但例如自愿省略不必要的属性/元素或给它们不同的名称以隐藏对我们私有内部逻辑的提示。然后获取数据的方法映射我们自己的数据结构并输入这些数据。你得到图片。

另外,这一次从纯软件架构的角度来看,我不希望他访问某些成员、属性、变量……因为我不需要他知道它们存在或不想让他在他修改它们时取悦以及他如何取悦。然而,它们仅与该界面相关,根本不是我们内部软件的一部分。

我现在拥有的是一个作为接口的类,他可以实例化它。它基本上提供了用于输出的 get 方法、提供输入和启动更新计算的方法,以及用于其他参数和值(如软件版本或当前状态)的 getter 和 setter。这些参数和其他变量的实际数据变量隐藏在我的 CPP 文件中,该文件被编译到 DLL 中,因此它们甚至没有声明为我们在我给他的 H 文件中用作接口的类的属性,甚至没有作为私人,他不知道他们 - 他只有吸气剂和二传手。

我应该在这里使用什么设计模式?我真的可以把我的变量放在我与客户共享的 H 文件中,作为类的属性,作为 private 吗?但是,他是否能够将它们从私有更改为公共,并通过为类编写新方法、访问它们并自由修改它们而编译器不会抱怨?我能否以其他方式为我的课程做出贡献并将其扩展到我的 CPP 文件或他无法访问的其他 H 文件中?

这么多问题,因为这对我来说都是新的。但是你得到了大致的了解:我想在这个 H 文件中与我的客户分享严格必要的、最少的信息,这样他就可以使我的 DLL 工作并获得他的数据输出。没有更多了。

在此先感谢,查尔斯

4

2 回答 2

4

首先,您应该考虑使用纯 C 接口构建DLL ,因为在 DLL 边界处具有带有 STL 类的 C++ 接口是高度约束的(例如,您的客户端必须使用相同的Visual C++ 编译器版本并动态链接到相同的 CRT 风格你用来构建 DLL)。

此时,您可以自由地开发一个薄层,它将屏蔽/隐藏您的 C++ 实现(在 DLL 中编译并以二进制形式交付)给客户。

您还可以提供一个简单的公共头文件,该文件可以以一种很好的面向 C++ 对象的方式包装由 DLL 公开的 C 接口层(有点像 ATL 和 WTL 对 Win32 纯 C API 函数所做的)。

于 2016-10-06T09:58:01.797 回答
2

我应该在这里使用什么设计模式?

更多细节请参考pimpl idiom

我真的可以把我的变量放在我与客户共享的 H 文件中,作为类的属性,作为 private 吗?但是,他是否能够将它们从私有更改为公共,并通过为类编写新方法、访问它们并自由修改它们而编译器不会抱怨?

是的,他会的。使用 pimpl 仍然是可能的,但要困难得多,并且需要逆向工程。

于 2016-10-06T09:30:44.633 回答