这个问题在很长一段时间里都在困扰着我,比如enviroment(vb,vba等)。
什么是更好的编程实践:有多个表单,每个表单都有相同的布局(按钮,字段等),但每个表单都做了一些不同的事情,或创建一个单独的表单,每次加载不同情况必须使用不同的SQL查询加载不同的数据集吗?
我将举出以下例子来澄清上述情况。
我有两种类型的用户。 User1和User2。它们都可以打开表单,但第一个用户(User1)必须只读,而第二个用户(User2)可以对数据进行更改。这两种方法的形式是否更好,加载时检查user1或user2是否打开它并相应地禁用或启用fieds,或者同一事物有两种不同的形式但是form1默认禁用了字段,默认情况下启用表单2控件。
上述情况非常简单,我认为答案是单一形式。但如果情况更复杂怎么办? (某些字段必须启用一个,其他字段必须启用另一个,不同的sql查询,用户之间的不同数据类型等)
答案 0 :(得分:2)
如果只是以几种不同的方式配置相同的行为,我会想出创建一个配置结构来描述字段是否应该是可见的(希望链接到您的业务模型) )。
你的代码就像这样(VB.Net):
Public Structure UserConfiguration
Public Dim IsAdministrator As Boolean
'...
End Structure
Public Class UserForm
Public Sub New(ByVal configuration as UserConfiguration)
SearchTextBox.Enabled = configuration.IsAdministrator
End Sub
End Class
然后将其称为
Dim config as New UserConfiguration()
config.IsAdministrator = true
Dim form as new UserForm(config)
form.Show()
但是如果您认为可能存在一些场景,其中您的表单的行为会有所不同,那么您应该提出inheritance:
Public Class BaseForm
'Some code common for all forms that will inherit from this one
End Class
Public Class AdministratorForm
Inherits BaseForm
Public Sub New()
SearchTextBox.Enabled = True
MsgBox("Hello, I am an administrator!")
End Sub
End Class
总而言之,经验法则是坚持DRY principle。如果您知道您的表单将共享相同的代码但仍然存在行为差异,则您不希望将代码复制粘贴两次。