我正在重新设计我们内部 ORM 工具的一部分,并且我想将 Field(代表数据库中的字段的类,如 CustomerFirstName)直接公开给最终开发人员。
所以这很容易实现,但是 API 变得有点难看,因为这个 Field 类以前在内部使用并且过于开放。例如,这只是一个小例子:IsDirty 属性不是只读的,这是最终开发人员不应该篡改的东西。
我考虑过可能创建两个接口,IPublicField 和 IPrivateField,并尝试让字段类来实现它们。但是,继续 IsDirty 示例,我不想要这样的东西:
Public ReadOnly Property PrivateIsDirty Implements IPrivateField.IsDirty
...
End Property
Public Property IsDirty Implements IPublicField.IsDirty
...
End Property
...它只是有点难看,而且您仍然可以转换回 Field 类并进入非只读方法。我也不想引入单独的 setter 方法,因为这将是另一个我不想考虑的重大更改,并且还会与 API 的其他部分产生不一致。
我最终将 Field 类重命名为 InnerField,并围绕它创建了一个外观/包装器样式结构,如下所示:
Public Class Field
Implements BusinessObjects.IField
Private InnerField As BusinessObjects.IInnerField
Public Sub New(ByVal field As IInnerField)
InnerField = field
End Sub
...
Public ReadOnly Property IsDirty() As Boolean Implements BusinessObjects.IField.IsDirty
Get
Return InnerField.IsDirty
End Get
End Property
...
End Class
这似乎工作得很好。在内部,InnerField 是适当开放的,我们可以在不影响最终开发人员的情况下自由地在未来使其更加开放,而在外部,Field 类提供了最终开发人员所需的简化、锁定工具。
因此,假设这是连贯的,我想知道您在这种情况下可能会如何进行,以及我的解决方案从外面看起来是否合理。
谢谢!