Tag: 设计

C#中基于插件的应用程序

我必须使用我选择的语言制作图形用户界面应用程序。 该应用程序将在Windows XP上运行。 它将是某种复杂的Windows窗体应用程序。 我认为,根据大多数建议,C#将是最好用的。 GUI左侧的树结构将在从配置文件读取后填充,该配置文件将是二进制文件。 (但最初我可以用一个简单的ASCII文件来测试我的代码。) 应用程序将通过此GUI接受来自用户的一些输入,并将其写回相同的配置文件,并将反映树形结构或标签或表单上任何其他相关字段的更改。 每个选项卡将有3个选项卡和3个相应的配置文件。 我现在需要一些帮助来设计应用程序。 我打算制作一个主机应用程序(主应用程序)并使用3个选项卡控件作为插件。 这可行吗? 如果是这样,请指导我这个。 我的意思是如何在C#中创建3个插件以及如何编写接口以便主应用程序知道要加载哪个插件以及何时加载它? 我的项目文件夹下会有一个单独的“插件”文件夹吗? 我希望你明白我的意思,虽然这对你来说太少了。 此外,项目中已存在一些.cpp文件。 这些文件以及一些.h文件包含一些重要的定义和常量。 这些需要与我的C#应用​​程序集成。 我不知道如何做到这一点,但我确信通过在.dll中编译.cpp代码然后将已编译的.dll暴露给我的C#应用​​程序是可能的。 如果您需要有关顶级设计的更多信息,请与我们联系。 谢谢,Viren

如何在实际需要之前初始化C#静态类?

我有一个带静态构造函数的静态类,需要一些时间(10-15秒)来执行并完全初始化类。 为了提高性能,我决定将这个静态类显式初始化,而不是在第一次需要它时,以便在实际需要使用时准备好。 我的第一个想法是为类创建一个Initialize()方法,但由于我已经有了一个静态构造函数,这个方法除了是调用显式初始化类而不访问任何类的方法之外似乎不需要做任何其他事情。其他公共方法或财产。 拥有一种不直接做任何事情的方法对我来说似乎并不合适。 然后我想我可以将代码从静态构造函数移动到这个Initialize()方法中,但是我还希望在首次需要时初始化类并且没有显式调用Initialize()方法。 总而言之,我希望遵守以下标准: 我想允许显式初始化静态类(可能通过使用公共Initialize()方法)。 我不想在不需要它时访问类上的任何其他公共方法或属性,即使这会初始化静态类。 如果该类尚未显式初始化,我仍然希望在首次需要时初始化它(即访问其他公共方法或属性时,意图使用它们提供的function或数据)。 这是一个帮助类,使用Singleton设计模式对我的目的来说不是必需的。 对于用C#编写的静态类,遵循上述标准的正确方法是什么? 这也适用于其他编程语言(例如Java),但我个人对使用C#编写的解决方案感兴趣。

TDD是否意味着不考虑课堂设计?

我正在制作角色扮演游戏以获得乐趣并尝试在开发时使用TDD。 我看到的许多TDD示例都侧重于首先创建测试,然后创建使测试通过所需的对象。 例如: [Test] public void Character_WhenHealthIsBelowZero_IsDead() { // create default character with 10 health Character character = new Character(); character.SubtractHealth(20); Assert.That(character.IsAlive, Is.EqualTo(false)); } 所以基于此我将创建字符类和适当的属性/方法。 这似乎很好,但我的class级设计真的应该不断改进我的测试吗? 这比制定我的游戏提前需要的可能对象更好吗? 例如,我通常会想到一个基本的Character类,然后是子类,例如Wizard,Fighter,Theif。 或者是一种平衡的方法? 我在哪里绘制出我需要的可能的类和层次结构,但首先编写测试以validation它们实际上是否需要?

.NET类设计问题

我有一个名为Question的类,它有一个名为Type的属性。 基于这种类型,我想以特定的方式将问题呈现给html(多选=单选按钮,多个答案=复选框等…)。 我开始使用单个RenderHtml方法,根据问题类型调用子方法,但我正在考虑将渲染逻辑分离为实现接口的各个类可能更好。 但是,由于此类使用NHibernate持久化到数据库,并且接口实现依赖于属性,因此我不确定如何最好地布局类。 有问题的课程: public class Question { public Guid ID { get; set; } public int Number { get; set; } public QuestionType Type { get; set; } public string Content { get; set; } public Section Section { get; set; } public IList Answers { get; set; } } 基于QuestionType枚举属性,我想呈现以下内容(只是一个示例): [Content] [Answer […]

撤消重做实现的最佳实践

我需要为我的窗口应用程序(像powerpoint这样的编辑器)实现Undo / Redo框架工作,应该遵循的最佳实践是什么,如何处理我的对象的所有属性更改以及它在UI上的reflection。

事件,代表或接口?

假设我有一个Monkey类,有时需要获取Banana的一个实例。 提供这种香蕉的方式对猴子不感兴趣,但它确实启动了香蕉采集。 现在我至少有三种方法可以将我的猴子送到香蕉供应商那里。 最好的方法是什么? 1.事件 举起一场Monkey.BananaNeeded活动。 事件处理程序设置BananaNeededEventArgs.Banana属性。 2.界面 调用IBananaProvider.GetBanana 。 IBananaProvider实例作为构造函数参数或通过属性注入IBananaProvider 。 3.代表 调用System.Func类型的委托。 委托作为构造函数参数或通过属性注入Monkey中。 这个很诱人,因为它不需要声明任何额外的接口或类,但显然它不是一个受欢迎的选择。

维持类之间的双向关系

在具有ORM的应用程序中,在类之间进行双向映射是很常见的。 像这样: public class Product { private List HistoricPrices { get; private set;} } public class Price { private Product Product { get; set; } } 在代码中是否有一种可接受的方式来维护这种关系? 那么当我向产品添加价格时,Product属性会自动设置吗? 理想情况下,我正在寻找一个易于重复使用的解决方案。 向集合添加内容然后手动设置相反的关系似乎是错误的。 请注意,这不是关于如何建模产品和价格的问题,这是一个如何建立双向关系的问题。 在很多情况下这是完全合理的。

MVVM:如何处理嵌套的ViewModel之间的交互?

我一直在尝试经常提到的MVVM模式,在某些情况下我很难定义明确的边界。 在我的应用程序中,我有一个对话框,允许我创建到Controller的连接。 对话框有一个ViewModel类,这个类很简单。 但是,该对话框还包含一个附加控件(由ContentTemplateSelector选择),该控件根据所连接的Controller的特定类型而有所不同。 此控件具有自己的ViewModel。 我遇到的问题是,当我按OK键关闭对话框时,我需要实际创建请求的连接,这需要在内部Controller特定的ViewModel类中捕获的信息。 简单地让所有特定于Controller的ViewModel类实现构建连接的公共接口是很诱人的,但是内部ViewModel是否应该真正负责这种构造? 我的一般问题是:ViewModel应该如何与彼此交互,是否有任何普遍接受的设计模式,特别是当’父’VM需要来自’子’VM的帮助以便知道该怎么做? 编辑: 我确实想出了一个比我原先想象的更清洁的设计,但我仍然不确定这是否是“正确”的方式。 我有一些后端服务,允许ContentTemplateSelector查看Controller实例并伪神奇地找到要为连接构建器显示的控件。 让我烦恼的是我的顶级ViewModel必须查看生成的控件的DataContext并将其转换为适当的界面,这似乎是个坏主意(为什么View的DataContext与创建有关?连接?) 我结束了这样的事情(简化): public interface IController { IControllerConnectionBuilder CreateConnectionBuilder(); } public interface IControllerConnectionBuilder { ControllerConnection BuildConnection(); } 我有我的内部ViewModel类实现IControllerConnectionBuilder ,Controller返回内部ViewModel。 然后,顶级ViewModel可视化此IControllerConnectionBuilder (通过伪魔法机制)。 它仍然困扰我一点,这是我的内部ViewModel执行构建,但至少现在我的顶级ViewModel不必知道脏细节(它甚至不知道或不关心可视化控件正在使用视图模型)。 如果有办法进一步清理它,我欢迎其他想法。 我仍然不清楚ViewModel有多少责任“好”。

在winforms中使用MVC MVP模式

我在线阅读了MVC,UI设计的MVP模式。 但是,即使重读了几次,我也无法完全理解它是如何工作的。 我使用C#/ winforms进行开发。 有人能指点我好书/博客/网站吗? 会让我决定是否应该采用它的东西。 谢谢。

如何在C#/ SQL Server中跟踪重复的日历事件?

我想在应用程序的日期/时间显示上显示重复事件。 此日期时间显示可以采用日历的forms,但它也可以只是即将发生的事件的列表。 处理可以重复的事件的最佳方法是什么? 例如:事件是否应该在数据库中存储一次并在显示代码中多次投影/重复? 该事件应该存储多次,然后才会被渲染?