【问题标题】:Multiple forms vs Single form with multiple initiations多种形式与具有多个启动的单一形式
【发布时间】:2015-12-02 19:36:34
【问题描述】:

这是一个在每个 .net 中困扰我很长时间的问题,例如环境(vb、vba 等)。

什么是更好的编程实践:拥有多个表单,每个表单具有相同的布局(按钮、字段等),但每个表单的功能略有不同,或者创建一个每次加载不同的表单情况必须使用不同的 SQL 查询加载不同的数据集?

我将给出下面的例子来阐明上述情况。

我有两种类型的用户。用户 1 和用户 2。他们都可以打开一个表单,但第一个用户 (User1) 必须以只读方式打开它,而第二个用户 (User2) 可以更改数据。最好在这里为它们两个使用相同的表单,并且在加载时检查 user1 或 user2 是否已打开它并相应地禁用或启用字段,或者对同一事物具有两个不同的表单,但 form1 默认禁用字段,并且默认情况下启用表单 2 控件。

上面的情况真的很简单,我认为答案是单一的形式。但如果情况更复杂怎么办? (某些字段必须启用一个,其他字段必须启用另一个,两者的不同 sql 查询,用户之间的不同数据类型等)

【问题讨论】:

    标签: vb.net forms vba


    【解决方案1】:

    如果只是以几种不同的方式配置 same 行为,我会想出一个配置结构来描述字段是否应该可见(最好与您的业务模型相关联)。

    您的代码将是这样的(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。如果您知道您的表单将共享同一段代码但仍然存在行为差异,那么您不想复制粘贴您的代码两次。

    【讨论】:

    • 这实际上是一个很好的答案,也是我所希望的!但是,我暂时不会接受它,因为如果您同意,我想看看其他人对这个问题的看法!还是非常感谢!!!
    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多