Tag: 设计

WCF将自定义对象传递给客户端并运行其方法

这既是设计又是技术问题。 我不确定我这样做是对的…… 我有一个WCF API,它与DB通信并传回一个Person对象(在一个单独的.dll中定义)这有两个方法和属性。 该对象正从WCF发送到调用客户端。 我想在客户端上调用Person的方法。 我知道这些不能从API下游发送。 但是,如果我引用WCF使用的相同.dll,我应该能够将API Person转换为.dll Person然后运行方法吗? 我希望我很清楚我想要实现的目标。

申请validation许可证?

如果我对我的应用程序强制执行许可限制,比如第一次运行应用程序,那么我的应用程序每次都应检查限制(可能是加密的许可证文件)吗? 你是如何设计这个部分的? 什么是最好的方法? 基本上我想以某种方式节省CPU周期(加密意味着解密等等)。我希望你理解我的关注。

登录multithreading环境并进行测试

在以下方案中,请告诉我有关如何设计日志记录以及如何测试日志的建议。 我有一个可以由多个线程调用的API。 单个线程对此API的一次调用会生成50 KB的日志。 是否存在用于在multithreading环境中登录的任何设计模式。 即所有线程的一个日志文件与每个线程的一个专用日志文件 ? 并且,如何测试此function。 (它应该测试吗?) 谢谢。

三角网格的良好数据结构

我正在为三维网格或由三角形组成的面集寻找一种节省内存且方便的数据结构。 目前我正在使用这种“经典”结构: 点列表和三角形列表。 每个点都有X,Y和Z值。 每个三角形有三个索引i0,i1,i2,它们指的是点列表中的一个点。 这是我能想到的最紧凑的布局。 如果我想做的就是绘制网格,并且永远不会修改或过滤它,这是完美的。 但是,它确实使大多数操作修改网格或生成新的部分网格非常麻烦,例如: 删除三角形是非常低效的。 仅生成少于3个邻居的三角形的新网格 查找并删除在给定边界框内具有一个或所有点的所有三角形 找到具有一定角度的所有边缘 去除短于一定长度的所有边缘 基本上任何需要修改网格,或迭代边缘或找到相邻面/边缘的东西,都需要生成和丢弃几个临时字典和散列集。 没有简单的方法可以迭代单个面的点或边,或单个点周围的边/面。 删除一个点意味着从每个三角形中删除它,然后更改所有三角形中所有其他点的索引值等。 是否有规范的数据结构没有这些缺点,但是内存效率高? 我不是在寻找一个完整的库,只是一个我自己可以实现的结构(尽管了解特定库如何解决这个问题可能很有趣)

使用MVVM模式时,与属性更改相关的代码是应该放入setter还是事件?

寻找有关放置代码的位置的指导,这取决于对属性的更改。 例如,我有一个视图模型,用于保存应用程序设置的状态 public SettingsViewModel(ISettingsRepository settings) { _settings = settings; // … } 对于设置属性的每次更改,我们必须将此更改持久保存到存储库,并且在某些属性上,其他属性会受到影响,因此需要其他代码。 我开始只是将这个逻辑添加到setter public ProjectCollection Projects { get { return _projects; } set { if (_projects == value) return; _projects = value; RaisePropertyChanged(“Projects”); // Extra work needed when collection of projects change _settings.SaveProjects(_projects); Startable = _projects != null && _projects.Count > 0; } } […]

对类库使用系统命名空间:好的或坏的

在我的类库中使用“系统命名空间”是一个好主意吗? 样品: namespace System.Web { public static class RequestExtensions { public static bool IsPost(this HttpRequest r) { return string.Compare(r.HttpMethod, “POST”, StringComparison.OrdinalIgnoreCase) == 0; } } } 优点:无需包含其他uses-clause(特别是对于扩展方法),因此在添加对库的引用后,所有子句都可以直接使用。 最好的示例是NUnitEx项目(使用NUnit的命名空间)。 缺点:潜在的名称冲突。

如何处理时间耦合?

我因此而苦苦挣扎: 我的类有一些具有时间耦合的方法。 也就是说,必须首先调用MethodA ,以“初始化” MethodB需要正常工作的数据。 我通常通过将违规依赖项 作为参数传递给“MethodB”来显式化时间耦合,就像在这个片段中一样: private class SomeClass { private string field; private int count; public SomeClass() { MethodA(); MethodB(field); } private void MethodA() { field = “Something”; } private void MethodB(string str) { count = str.Length; } } 虽然它使事情明确,但我觉得我做错了。 我最终得到的方法根本就不使用字段(静态方法!),所以这个类开始变得不那么紧密了。 这是最好的方法吗? (通过传递参数失去凝聚力) 编辑:关于一些建议使用字段作为构造函数中的参数或使用构建器模式来避免无效状态的答案: 我不能这样做,因为在我的情况下我正在构建一个Parser 。 MethodA读取输入并根据它设置状态(从文件中读取字符),然后调用MethodB。 必须以正确的顺序调用它们。 这是真正的问题:应该在另一个之前调用一个。

如何检测文本文件的实时更改?

我正在写一个小的PC工具来使用c#或java读取日志文件。 日志文件将采用.txt格式。 应用程序正在运行并写入日志,我希望我的工具同时打开日志,并在将新行写入日志文件时自动刷新。 我的挑战是,如何检测日志文件的变化,以便我的工具具有实时显示能力? 这是一个普遍的问题,但伪代码将不胜感激!

收集属性应该只读 – 漏洞?

在遵守代码分析错误的过程中,我正在更改我的属性以拥有私有的setter。 然后我开始尝试理解为什么多一点。 根据一些研究,MS说: 可写集合属性允许用户使用完全不同的集合替换集合。 答案在这里指出: 在List对象上添加公共setter是危险的。 但它没有列出危险的原因 。 这就是我很好奇的部分。 如果我们有这个集合: public List Foos { get; set; } 为什么要将setter设为私有? 显然我们不希望客户端代码替换集合, 但如果客户端可以删除每个元素,然后添加他们想要的东西,那么重点是什么? 这与完全替换系列不一样吗? 遵循此代码分析规则如何提供价值?

C#CA2104 – 自动代码分析不喜欢静态只读可变类型

我有这样的代码: public abstract class Base { // is going to be used in deriving classes // let’s assume foo is threadsafe protected static readonly Foo StaticFoo = new Foo(); } Visual Studio 2008的代码分析弹出以下消息: CA2104 : Microsoft.Security : Remove the read-only designation from ‘Base.StaticFoo’ or change the field to one that is an immutable reference type. […]