那些迷信设计模式的人,来修改一下这个方法吧。看看你最终的代码膨胀为几倍。。。

  1. public virtual PasswordChangeResult ChangePassword(ChangePasswordRequest request)
  2. {
  3. if (request == null)
  4. throw new ArgumentNullException("request");
  5.  
  6. var result = new PasswordChangeResult();
  7. if (String.IsNullOrWhiteSpace(request.Email))
  8. {
  9. result.AddError(_localizationService.GetResource("Account.ChangePassword.Errors.EmailIsNotProvided"));
  10. return result;
  11. }
  12. if (String.IsNullOrWhiteSpace(request.NewPassword))
  13. {
  14. result.AddError(_localizationService.GetResource("Account.ChangePassword.Errors.PasswordIsNotProvided"));
  15. return result;
  16. }
  17.  
  18. var customer = _customerService.GetCustomerByEmail(request.Email);
  19. if (customer == null)
  20. {
  21. result.AddError(_localizationService.GetResource("Account.ChangePassword.Errors.EmailNotFound"));
  22. return result;
  23. }
  24.  
  25. var requestIsValid = false;
  26. if (request.ValidateRequest)
  27. {
  28. //password
  29. string oldPwd = "";
  30. switch (customer.PasswordFormat)
  31. {
  32. case PasswordFormat.Encrypted:
  33. oldPwd = _encryptionService.EncryptText(request.OldPassword);
  34. break;
  35. case PasswordFormat.Hashed:
  36. oldPwd = _encryptionService.CreatePasswordHash(request.OldPassword, customer.PasswordSalt, _customerSettings.HashedPasswordFormat);
  37. break;
  38. default:
  39. oldPwd = request.OldPassword;
  40. break;
  41. }
  42.  
  43. bool oldPasswordIsValid = oldPwd == customer.Password;
  44. if (!oldPasswordIsValid)
  45. result.AddError(_localizationService.GetResource("Account.ChangePassword.Errors.OldPasswordDoesntMatch"));
  46.  
  47. if (oldPasswordIsValid)
  48. requestIsValid = true;
  49. }
  50. else
  51. requestIsValid = true;
  52.  
  53. //at this point request is valid
  54. if (requestIsValid)
  55. {
  56. switch (request.NewPasswordFormat)
  57. {
  58. case PasswordFormat.Clear:
  59. {
  60. customer.Password = request.NewPassword;
  61. }
  62. break;
  63. case PasswordFormat.Encrypted:
  64. {
  65. customer.Password = _encryptionService.EncryptText(request.NewPassword);
  66. }
  67. break;
  68. case PasswordFormat.Hashed:
  69. {
  70. string saltKey = _encryptionService.CreateSaltKey();
  71. customer.PasswordSalt = saltKey;
  72. customer.Password = _encryptionService.CreatePasswordHash(request.NewPassword, saltKey, _customerSettings.HashedPasswordFormat);
  73. }
  74. break;
  75. default:
  76. break;
  77. }
  78. customer.PasswordFormat = request.NewPasswordFormat;
  79. _customerService.UpdateCustomer(customer);
  80. }
  81.  
  82. return result;
  83. }

基本上,把switch,用设计模式代替,肯定是bug和过度设计。想想,本来修改一个文件几行代码可以解决的问题,变成修改3-6个类才能实现一样的功能。不是傻是什么?的更多相关文章

  1. 设计模式学习(二):面向对象设计原则与UML类图

    一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...

  2. java设计模式--基础思想总结--抽象类与架构设计思想

    抽象类?这个东西我感觉没什么卵用啊,又不能拿来new对象,没有具体的对象的抽象类,有什么实际的意义呢?这是很多刚刚接触java抽象类语法时的第一反应(当然,包括我).确实,很多刚刚接触抽象类这个概念的 ...

  3. 手写一个HTTP框架:两个类实现基本的IoC功能

    jsoncat: 仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架 国庆节的时候,我就已经把 jsoncat 的 IoC 功能给写了,具体可以看这篇文章&l ...

  4. 《设计模式之美》 <03>面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?

    面向对象 现在,主流的编程范式或者是编程风格有三种,它们分别是面向过程.面向对象和函数式编程.面向对象这种编程风格又是这其中最主流的.现在比较流行的编程语言大部分都是面向对象编程语言.大部分项目也都是 ...

  5. 实现Magento多文件上传代码功能开发

    在Magento中上传单个文件很简单,可以直接在继承的Mage_Adminhtml_Block_Widget_Form类中直接添加如下组件Field:  对于图片:   $fieldset->a ...

  6. 【APP UI 设计模式】(一)APP UI 设计原则和流程

    一.基本原则         1.用户体验原则UCD,以用户为中心去设计         2.设计模式是可重用的设计规范实现         3.反模式是糟糕设计的典型,极力避免使用         ...

  7. Xcode使用小技巧-filter查找功能和查看最近修改的文件

    今天偶然发现了关于Xcode的一个小技巧: 1.查看最近修改的文件 2.使用filter查找制定文件 没错,就是下面这个东西,很容易忽略的一个小工具,在Xcode左下角位置. 通过这个,我们能够在整个 ...

  8. 在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了?

    在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了? 在删除成功后,加上这句话就可以了:$("#dg").datagrid ...

  9. asp.net导出excel-一行代码实现excel、xml、pdf、word、html、csv等7种格式文件导出功能而且美观-SNF快速开发平台

    分享: 腾讯微博  新浪微博   搜狐微博   网易微博  腾讯朋友  百度贴吧  豆瓣   QQ好友  人人网 作者:王春天  原文地址:http://www.cnblogs.com/spring_ ...

随机推荐

  1. 判断一个Bitmap图像是否是.9图

    见BitmapFactory的源码中 byte[] np = bm.getNinePatchChunk();  final boolean isNinePatch = np != null & ...

  2. ASP.NET购物车实现方法

    1.可以参考PetShop中的购物车实现方法 2.[经典示例分享]— 商城购物车设计(VS+Access)附源码 http://www.cnblogs.com/wenyang-rio/archive/ ...

  3. Centos 7 yum 安装Apache

    1.首先查看是否已经安装 rpm    -qa    httpd 2.如果没有 yum     install      httpd      -y rpm    -ql    httpd  查看 3 ...

  4. Fatal error: Using $this when not in object context in 解决方法

    Fatal error: Using $this when not in object context in 解决方法 粗心造成的错误 $this 只存在于下面情况 $obj = new object ...

  5. hdu 5443 The Water Problem 线段树

    The Water Problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  6. C#操作Excel文件(读取Excel,写入Excel)

    看到论坛里面不断有人提问关于读取excel和导入excel的相关问题.闲暇时间将我所知道的对excel的操作加以总结,如今共享大家,希望给大家可以给大家带了一定的帮助.另外我们还要注意一些简单的问题1 ...

  7. Java中的NIO和IO的对比分析

    总的来说,java中的IO和NIO主要有三点区别: IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器(Selectors) 1.面向流与面向缓冲 Java NIO和IO之间第一个最大的 ...

  8. 【shell】while read line 与for循环的区别

    http://m.blog.itpub.net/22664653/viewspace-1175858/

  9. careercup-中等难度 17.7

    17.7 给定一个整数,打印该整数的英文描述(例如“One Thousand,Two Hundred Thirty Four”). 解法: 举个例子,在转换19 323 984时,我们可以考虑分段处理 ...

  10. 斐波那契数列_java版本

    package 斐波那契数列; public class fbnq { public static void main(String[] args){ System.out.println(fibon ...