小编Dan*_*and的帖子

C#WinForms模型 - 视图 - 演示者(被动视图)

我正在用C#开发一个WinForms应用程序.我在GUI编程方面经验有限,而且我必须在飞行中学到很多东西.话虽这么说,这就是我正在建设的.

请参阅常规GUI查看以下链接:

GUI http://img227.imageshack.us/img227/1084/program0.jpg

现在,我已经完成了很多工作,但是在非常糟糕的自治设计模式中.我不知道该项目是否会达到一定的规模,因此,是时候进行一些重大的重构了.

我一直在研究GUI设计模式,我希望实现的模式是被动视图(参见http://martinfowler.com/eaaDev/PassiveScreen.html).我正在寻找一些如何将这些结合在一起的帮助.

背景:

1)根据用户在"TreeView"中单击的内容,左下角的"列表"将显示可填充"编辑器"区域的对象列表.这些对象可能是TextBox或DataGridView.用户切换列表以选择他/她想要在"编辑器"中看到的内容

2)该模型本质上是一个包含数据和配置文件的文件夹.有一个外部程序在给定目录上运行,创建输出文件/文件夹等.我正在开发的这个程序旨在以用户友好的方式有效地管理/配置这些对象

3)我一直在做的事情的问题是它几乎不可能测试,因此转向MVP-esque被动视图设计模式

我试图让它成为独立于View的程序.我无法找到任何更复杂的交互式视图与被动视图模式一起使用的示例.

问题:

1)我是否需要为程序的整个"外观"实现一个大的接口/视图,然后为每个TreeView,Editor,Logger等实现子接口/子视图?或者这样做有更好的"结构"吗?

2)当从视图"移交"事件到演示者/控制器时(无论你想使用什么术语WRT被动视图设计模式),我应该这样做的方式是什么?有时我有简单的属性需要更新,有时我需要一系列的步骤来展开.

我会喜欢这个主题的建议和意见.我已经浏览了互联网,但我没有找到足够的例子来帮助我继续这个项目.

提前致谢!

丹尼尔

c# mvp design-patterns passive-view

20
推荐指数
1
解决办法
2万
查看次数

如何构建C#WinForms模型 - 视图 - 演示者(被动视图)程序?

我正在设计一个具有以下基本概念的GUI(类似于Visual Studio的基本外观):

  1. 文件导航
  2. 控制选择器(用于选择要在编辑器组件中显示的内容)
  3. 编辑
  4. 记录器(错误,警告,确认等)

现在,我将使用TreeView进行文件导航,使用ListView选择要在编辑器中显示的控件,使用RichTextBox进行Logger.编辑器将具有两种类型的编辑模式,具体取决于TreeView中选择的内容.编辑器将是一个RichTextBox,用于手动编辑文件内的文本,或者它将是一个带有拖放DataGridViews和子文本框的面板,用于在此面板中进行编辑.

我试图遵循被动视图设计模式,将模型与视图完全分离,反之亦然.这个项目的本质是我添加的任何组件都需要编辑/删除.因此,我需要从给定控件到下一个控件的独立性.如果今天我使用TreeView进行文件导航,但明天我被告知要使用其他东西,那么我想要相对容易地实现一个新的控件.

我根本不明白如何构建程序.我理解每个Control的一个Presenter,但我不知道如何使它工作,以便我有一个View(程序的整个GUI)和控件(子视图),这样整个视图是可替换的以及个人反映我的模型的控件.

在主视图中,Passive View标准应该是轻量级的,我是否单独实现子视图?如果是这样,请说我有一个接口INavigator来抽象导航器对象的角色.导航器需要Presenter和Model才能在Navigator View和主View之间进行操作.我觉得我迷失在某个地方的设计模式行话中.

可以在这里找到最相似的相关问题,但它没有足够详细地回答我的问题.

有人请帮我理解如何"构建"这个程序吗?我感谢任何帮助.

谢谢,

丹尼尔

c# mvp design-patterns passive-view winforms

7
推荐指数
1
解决办法
8159
查看次数

验证公共/私有方法的函数参数时的最佳实践

做一些研究,似乎人们普遍认为公共方法的论据应该得到验证,而私人职能通常不会.这使我有一些问题,但到目前为止我还没有找到满意的答案.

例:

public void DoSomething(int i)
{
    if (i < 0)
        throw new ArgumentOutOfRangeException("i");

    double d = DoWork(i);
}

private double DoWork(int i)
{
    double ret = ...; // some calculation
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

思考:

  1. 如果要求i内部的非负面变化DoWork()怎么办?设计风险留下过时的验证检查.我知道,程序员负责调整已更改的函数的使用情况,但它让我想知道是否有更好的方法来最小化错误风险.

  2. 什么不同的呼叫DoWork()从不是DoSomething()?我们必须冗余地验证这些论点吗?

public void DoSomething(int i)
{
    if (i < 0)
        throw new ArgumentOutOfRangeException("i");

    double d = DoWork(i);
}

public void DoSomethingElse()
{
    int i = 5;
    if (i < 0)
        throw new ArgumentOutOfRangeException("i");

    double d = …
Run Code Online (Sandbox Code Playgroud)

c# validation

4
推荐指数
2
解决办法
3098
查看次数

具有数据结构(字典,列表等)的C#.NET内存管理

我希望有人能在以下情况下阐明.NET如何处理垃圾回收。

我有一个程序需要像在Visual Studio中看到的那样做一种非常特殊的“文件查找”功能。我可能要搜索成千上万个文件,然后将结果收集在List(Pair())对象中,其中Pair是我创建的用于存储一对项目的简单类(显然)。

当我用完需要的东西时,我在列表上调用Clear()来摆脱旧的信息。这似乎没有帮助释放内存,因为我可以在任务管理器上看到消耗的内存没有减少。

对于很大的搜索,我可能要处理5,000,000行信息​​(需要在我的计算机上使用大约500MB的内存)。搜索结束后,内存消耗量保持不变。我使Pair类实现了IDisposable,但这没有帮助。

知道我可能会缺少什么吗?谢谢!

.net c# garbage-collection memory-management data-structures

1
推荐指数
1
解决办法
1880
查看次数