在我职业生涯中的第一个,我必须向客户提供一个DLL,其中包含我们的基础,通用软件和使其按照客户需要的方式工作的界面+允许客户输入输入和读取输出。
现在我的重大问题是,由于知识产权,我可能不会向客户展示他并非绝对需要知道的事情。这包括数据类型,因此我甚至无法向他显示我们任何内部方法的签名。我已经创建了模仿我们自己的内部数据的数据类型和结构,但是例如它们自愿省略不必要的atrributes /元素或给它们不同的名称来隐藏我们私有内部逻辑的提示。然后获取数据的方法映射我们自己的数据结构并输入。你得到了照片。
另外,这次从纯软件架构的角度来看,我不希望他访问某些成员,属性,变量......因为我不需要他知道他们存在或者不希望他修改他们喜欢的时候和喜欢的人。然而,它们仅与该界面相关,并不是我们内部软件的全部内容。我现在所拥有的是一个充当接口的类,他可以实例化它。它主要提供输出的get方法,提供输入和启动更新计算的方法,以及其他参数和值的getter和setter(如软件版本或当前状态)。这些参数和其他变量的实际数据变量隐藏在我的CPP文件中,该文件被编译到DLL中,因此它们甚至不被声明为我们在H文件中用作接口的类的属性,我甚至没有作为私人,他并不了解他们 - 他只有吸气剂和制定者。
我应该在这里使用什么设计模式?我是否可以将我的变量放在我与客户共享的H文件中,作为类的属性,作为私有?但是,他是否能够将它们从私有更改为公共,并通过为类创建新方法,访问它们并自由修改它们而无需编译器抱怨?我是否可以为我的课程做出贡献并将其扩展到我的CPP文件或他无法访问的其他H文件中?
这么多问题,因为这对我来说都是新的。但是你得到了一般情况:我想在这个H文件中与我的客户分享严格必要的,最少的信息,这样他就可以让我的DLL工作并获得他的数据输出。不多了。
提前致谢, 查尔斯
答案 0 :(得分:4)
首先,您应该考虑使用纯C接口构建 DLL ,因为在DLL边界处具有STL类的C ++接口是高度约束(例如,您的客户端具有使用相同的 Visual C ++编译器版本并动态链接到用于构建DLL的相同CRT风格。)
此时,您可以自由地开发一个薄层,用于屏蔽/隐藏您的C ++实现(在DLL中编译,并以二进制方式提供)给客户。
您还可以提供一个简单的公共头文件,它可以用一个很好的C ++面向对象的方式包装DLL公开的C接口层(有点像ATL和WTL做的Win32 pure-C API函数)。
答案 1 :(得分:2)
我应该在这里使用什么设计模式?
有关详细信息,请参阅pimpl idiom。
我是否可以将我的变量实际放入与客户共享的H文件中,作为类的属性,作为私有?但是,他是否能够将它们从私有更改为公共,并通过为类创建新方法,访问它们并自由修改它们而无需编译器抱怨?
是的,他愿意。使用pimpl它仍然是可能的,但更加困难并且需要逆向工程。