我有一个维护相当复杂的遗留类:
class OldClass {
method1(arg1, arg2) {
... 200 lines of code ...
}
method2(arg1) {
... 200 lines of code ...
}
...
method20(arg1, arg2, arg3) {
... 200 lines of code ...
}
}
Run Code Online (Sandbox Code Playgroud)
这些方法非常庞大,非结构化和重复性(开发人员喜欢复制/粘贴aprroach).我想将每个方法分成3-5个小函数,使用一个pulic方法和几个帮助器.
你会建议什么?我想到了几个想法:
为每个方法添加几个私有帮助器方法,并将它们连接到#region(直接重构)
使用命令模式(每个OldClass方法在一个单独的文件中使用一个命令类).
使用一个公共方法和几个私有帮助器方法为每个方法创建辅助静态类.OldClass方法将实现委托给适当的静态类(非常类似于命令).
?
先感谢您!
开发人员团队通常具有一些基于类功能的类命名约定以及它在模式中扮演的角色.例如,我们使用以下后缀:
等等.
您的团队使用的后缀/前缀的命名约定是什么?
请建议转换Dictionary<Key, Value>为最短的方式Hashset<Value>
IEnumerables 是否内置ToHashset() LINQ扩展?
先感谢您!
可能重复:
关系数据库设计问题 - 代理键还是自然键?
当我创建关系表时,有一种诱惑就是选择主键列,这些列的值是唯一的.但出于优化和统一的目的,我每次都会创建人工Id列.如果有一列(或列组合)应该是唯一的,我会为其创建唯一索引,而不是将它们标记为(复合)主键列.
是否真的是一个好的做法总是更喜欢人工"Id"列+索引而不是主键的自然列?
我将实现标准功能 - 用于PC的Web表单上的生日输入.
有很多接口如何实现它.
你更喜欢什么样的输入?你的意见最糟糕的是什么?
我有命令类实现ICommand {Execute}接口.有几个命令有重复的代码片段.我有几种选择如何干:
你会建议什么,为什么?
添加 感谢大家回复,许多答案都很相似和有用!
有汇编指南的Microsoft名称,但我个人不喜欢解决方案树中冗长的名称.当有十几个冗长的名字时,很难选择你想要的项目.
您是否将项目名称与程序集名称保持一致或以某种方式缩短它?
例如,如果有MyCompany.MyProject.Dal.dll程序集可能将项目命名为Dal(但可以将其编译为MyCompany.MyProject.Dal.dll)更有用吗?
先感谢您!
我们有一组MSVS解决方案(解决方案"A","B","C",......),它们在程序集中共享基本功能,称为"Common.dll".
有3-5个活跃的解决方案(正在开发中),而其他解决方案是被动的,几乎不会被重建.
Common.dll总是在开发中.如何保存我的解决方案代码有多种选择,您会建议什么以及为什么?
一个).将common.dll源代码放到每个解决方案中.优点:它将帮助主动解决方案与common.dll并排增长,而被动解决方案将可编译.缺点:在活动解决方案之间同步活动的common.dll代码很困难
B).将common.dll二进制代码放到每个解决方案中.优点:所有项目都可以编译,而common.dll代码将集中.缺点:很难与common.dll并行增加活动解决方案
C).引用每个项目到最后的common.dll二进制文件看起来像B.但如果common.dll会增长并改变它的接口(有些人可能会说接口应该始终保持不变),它会带来被动解决方案的问题
d).?
先感谢您!
我编写WCF服务并希望保留它的活动日志:跟踪,警告和错误消息.非常直接的方法是将所有合同服务代码包装在try/catch部分中,并从catch部分重新抛出服务合同错误异常中写入错误消息.
我想如果有一个代码点来捕获所有未捕获的异常而不是几十个try/catch部分会很好.从该点编写合同方法参数以提供详细的错误信息也是有用的.
WCF有可能吗?
在WCF服务中组织错误处理的最佳实践是什么?
先感谢您!
当它的任何部分配置发生变化时,我必须完全重启应用程序.IIS最好在asp.net应用程序中查看配置,但如何重新启动控制台或服务等应用程序?
是否可以使用FileSystemWatcher监视配置文件更改并启动新的应用程序实例,关闭当前应用程序?
就像是:
var file = new FileInfo(AppDomain.CurrentDomain.
SetupInformation.ConfigurationFile);
var watcher = new FileSystemWatch(file.Directory.FullName)
{
Filter = "...",
NotifyFilter = NotifyFilter.LastWrite }
);
watcher.Changed += .. // Process.Start(..), current process shutdown
watcher.EnableRaisingEvents = true;
Run Code Online (Sandbox Code Playgroud) .net ×5
c# ×2
class ×1
dictionary ×1
hashset ×1
html ×1
inheritance ×1
input ×1
primary-key ×1
rdbms ×1
refactoring ×1
sql ×1
usability ×1
wcf ×1