小编And*_*rko的帖子

重构.用大方法降低大类代码复杂性的方法

我有一个维护相当复杂的遗留类:

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方法将实现委托给适当的静态类(非常类似于命令).

先感谢您!

c# refactoring

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

.NET类前缀和后缀命名约定

开发人员团队通常具有一些基于类功能的类命名约定以及它在模式中扮演的角色.例如,我们使用以下后缀:

  • 信息的数据结构类(仅限公共属性,没有方法,如业务实体).
  • 整个项目中使用具有通用功能的类的助手(StringHelper,FormatHelper,ImageHelper)
  • 控制器用于MVC的控制器
  • DAL类的存储库,包含按其专用的实体分组的操作(PersonRepository,OrderRepository)
  • 业务逻辑类经理

等等.

您的团队使用的后缀/前缀的命名约定是什么?

.net class naming-conventions

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

C#:字典值到hashset转换

请建议转换Dictionary<Key, Value>为最短的方式Hashset<Value>

IEnumerables 是否内置ToHashset() LINQ扩展?

先感谢您!

c# dictionary hashset

8
推荐指数
2
解决办法
7502
查看次数

SQL:主键列.人工"Id"列与"自然"列

可能重复:
关系数据库设计问题 - 代理键还是自然键?

当我创建关系表时,有一种诱惑就是选择主键列,这些列的值是唯一的.但出于优化和统一的目的,我每次都会创建人工Id列.如果有一列(或列组合)应该是唯一的,我会为其创建唯一索引,而不是将它们标记为(复合)主键列.

是否真的是一个好的做法总是更喜欢人工"Id"列+索引而不是主键的自然列?

sql rdbms primary-key

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

Html Birthdate输入可用性最佳实践

我将实现标准功能 - 用于PC的Web表单上的生日输入.

有很多接口如何实现它.

  • 日期选择器(OMG,我无法忍受选择日期.需要太多点击)
  • 3下拉列表.日月年.(虽然我不是很喜欢它 - 它们太长了)
  • 直截了当的输入:DD.MM.YYYY(我的选择,但我是程序员,不是客户)
  • ... 多一点

你更喜欢什么样的输入?你的意见最糟糕的是什么?

html usability input date-of-birth

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

Helper类(es)vs功能继承.最佳实践

我有命令类实现ICommand {Execute}接口.有几个命令有重复的代码片段.我有几种选择如何干:

  • 创建静态帮助程序类并在其中移动重复的代码
  • 使用受保护的帮助程序方法创建命令继承

你会建议什么,为什么?

添加 感谢大家回复,许多答案都很相似和有用!

language-agnostic inheritance

7
推荐指数
2
解决办法
1463
查看次数

项目和程序集命名约定

汇编指南的Microsoft名称,但我个人不喜欢解决方案树中冗长的名称.当有十几个冗长的名字时,很难选择你想要的项目.

您是否将项目名称与程序集名称保持一致或以某种方式缩短它?

例如,如果有MyCompany.MyProject.Dal.dll程序集可能将项目命名为Dal(但可以将其编译为MyCompany.MyProject.Dal.dll)更有用吗?

先感谢您!

.net naming-conventions

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

在.NET中的解决方案之间共享公共库的最佳实践

我们有一组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).?

先感谢您!

.net version-control project-management

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

WCF:服务器端错误处理.最佳实践

我编写WCF服务并希望保留它的活动日志:跟踪,警告和错误消息.非常直接的方法是将所有合同服务代码包装在try/catch部分中,并从catch部分重新抛出服务合同错误异常中写入错误消息.

我想如果有一个代码点来捕获所有未捕获的异常而不是几十个try/catch部分会很好.从该点编写合同方法参数以提供详细的错误信息也是有用的.

WCF有可能吗?

在WCF服务中组织错误处理的最佳实践是什么?

先感谢您!

.net wcf

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

配置更改时.Net应用程序自动重启

当它的任何部分配置发生变化时,我必须完全重启应用程序.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 configuration

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