我有一个很久以前写的应用程序。部分应用程序从DB获取字符串(这是一个日期)并将其显示在屏幕上。
由于DATE转换为字符串然后存储在DB中。在显示它时,字符串(DATE)从db重新获得并显示在Winform上。
现在,我们需要支持法国客户和法国遵循-DDMMYYYY格式的需求。我想过在DB层和UI层之间使用adpater模式。适配器根据区域设置转换DATE格式。
我的问题是,在这个场景中,我必须创建一个这个适配器的对象。因为我正在修改课程。不违反开放原则。
是使用适配器模式的正确方法。在使用客户端应用程序时使用适配器模式是否可以(在这种情况下,人们在过去5年中使用它)。
或任何其他方式来更改功能以支持客户的要求。
谢谢你, 戒日
答案 0 :(得分:1)
适配器模式用于将现有接口转换为客户端需要/期望的接口。但听起来你需要的只是重新格式化的日期 - 它仍然是一个字符串。这听起来不像适配器本身的工作。
使用适配器模式,理论上您不必打开现有的类。适配器包装要调整的类并公开新接口。我想象的是痛苦的是,适配器类也必须通过所有未更改的公共内容,因为客户端理想地只与适配器“对话”,而不是原始类。
一般解决方案
一般的想法是在UI控件设置为值之前重新格式化日期。我希望您的UI控件类具有在实际OnChange
事件之前触发的事件。
您的应用程序是否在C#中?它是否使用.NET Binding类?
.NET Binding
类有2个非常非常方便的事件:Parse
和Format
。它们在生活中的目的是允许您更改格式,值,类型,以及值来回传递的任何。 您不需要修改任何现有接口或现有方法代码。您添加事件处理程序以重新格式化日期字符串。
开放/封闭原则不是绝对的
如果您有充分的理由打开课程进行修改,那么确定。但请记住一些隐含的开放/封闭目标:
打开/关闭不是借口:
答案 1 :(得分:0)
将域逻辑与表示逻辑和持久性分开是一种很好的做法。
您谈论的DB layer
和UI layer
之间的适配器似乎是domain model
。