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

 

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

 

 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 
26         var requestIsValid = false;
27         if (request.ValidateRequest)
28         {
29             //password
30             string oldPwd = "";
31             switch (customer.PasswordFormat)
32             {
33                 case PasswordFormat.Encrypted:
34                     oldPwd = _encryptionService.EncryptText(request.OldPassword);
35                     break;
36                 case PasswordFormat.Hashed:
37                     oldPwd = _encryptionService.CreatePasswordHash(request.OldPassword, customer.PasswordSalt, _customerSettings.HashedPasswordFormat);
38                     break;
39                 default:
40                     oldPwd = request.OldPassword;
41                     break;
42             }
43 
44             bool oldPasswordIsValid = oldPwd == customer.Password;
45             if (!oldPasswordIsValid)
46                 result.AddError(_localizationService.GetResource("Account.ChangePassword.Errors.OldPasswordDoesntMatch"));
47 
48             if (oldPasswordIsValid)
49                 requestIsValid = true;
50         }
51         else
52             requestIsValid = true;
53 
54 
55         //at this point request is valid
56         if (requestIsValid)
57         {
58             switch (request.NewPasswordFormat)
59             {
60                 case PasswordFormat.Clear:
61                     {
62                         customer.Password = request.NewPassword;
63                     }
64                     break;
65                 case PasswordFormat.Encrypted:
66                     {
67                         customer.Password = _encryptionService.EncryptText(request.NewPassword);
68                     }
69                     break;
70                 case PasswordFormat.Hashed:
71                     {
72                         string saltKey = _encryptionService.CreateSaltKey(5);
73                         customer.PasswordSalt = saltKey;
74                         customer.Password = _encryptionService.CreatePasswordHash(request.NewPassword, saltKey, _customerSettings.HashedPasswordFormat);
75                     }
76                     break;
77                 default:
78                     break;
79             }
80             customer.PasswordFormat = request.NewPasswordFormat;
81             _customerService.UpdateCustomer(customer);
82         }
83 
84         return result;
85     }

 

转载于:https://www.cnblogs.com/apachestorm/p/4154573.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

inotify-tools、sersync配置及压力测试

一、Inotify介绍: Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。使用 inotify 很简单:创建一个文…

java jml_JML 入门

【IT168 技术文章】面向对象分析和设计的原则之一就是应当尽可能地把过程设想往后推。我们大多数人只在实现方法之前遵守这一规则。一旦确定了类及其接口并该开始实现方法时,我们就转向了过程设想。那么到底有没有别的选择?和大多数语言一样,编写 Java …

转移指令检测题9

补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在DX中 assume cs:code code segment start:mov ax,2000h mov ds,ax mov bx,0 s: mov cl,[bx] mov ch,0 inc cx ;此处为要…

c语言 java append_C++中append函数的用法和函数定义。谢谢!

展开全部要想使用标准C中string类,必须要包含#include // 注意是,不62616964757a686964616fe78988e69d8331333339663434是,带.h的是C语言中的头文件using std::string;using std::wstring;或using namespace std;下面你就可以使用string/wstr…

PHP array_flip() array_merge() array+array的使用总结

array_flip(array); //传递一个数组参数,对该数组的键、值进行翻转 例如: $a array(a,b,c ); print_r(array_flip($a));//输出为: Array ([a] > 0[b] > 1[c] > 2 )//需要注意的是: array_flip(): Can only flip STRING …

很好用的程序员在线画图软件

今天向大家推荐一个很好用的在线画图软件:今天向大家推荐一个很好用的在线画图软件:今天向大家推荐一个很好用的在线画图软件:(重要的事情说三篇)连接地址如下:https://www.processon.com/i/55e3195de4b0df…

java breakpoint_java断点

第一步:用firefox运行程序,当点击保存,提示保存失败后,启动firebug通过请求找到addNew.ezt出现错误,在eztnews.xml里通过ctrlF查找找到请求执行的类和方法找到NewsAction类的doAddNew方法然后在通过找到NewsActions.ja…

1)C++对象大小计算

C对象的大小不同的编译器的实现是不一样的,以下仅讨论.net2003,其他编译的可能出现的结果以下也做了分析和猜测。在反推不同编译器实现的C对象的大小时。对齐是一个很重要也容易被遗忘的问题。class A{}; 类A是一个空类,但是它的大小并不…

OC之ARC环境中的循环strong问题

2019独角兽企业重金招聘Python工程师标准>>> main.m文件&#xff1a; #import <Foundation/Foundation.h> #import "Person.h" #import "Dog.h"int main() {Person *p [[Person alloc] init];Dog *d [[Dog alloc] init];p.dog d;d.per…

java metric_java版的Metric工具介绍

Metrics是一个给JAVA服务的各项指标提供度量工具的包&#xff0c;在JAVA代码中嵌入Metrics代码&#xff0c;可以方便的对业务代码的各个指标进行监控&#xff0c;同时&#xff0c;Metrics能够很好的跟Ganlia、Graphite结合&#xff0c;方便的提供图形化接口。基本使用方式直接将…

15_采用Pull解析器解析和生成XML内容

java还提供SAX和DOM用于解析XML Android还集成了Pull解析器——推荐 package cn.itcast.service;import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1…

Android自定义view之圆形进度条

本节介绍自定义view-圆形进度条思路&#xff1a;根据前面介绍的自定义view内容可拓展得之&#xff1b;1&#xff1a;新建类继承自View2&#xff1a;添加自定义view属性3&#xff1a;重写onDraw(Canvas canvas)4&#xff1a;实现功能下面上代码1.自定义view代码&#xff1a; pub…

java二级考试备考_2017计算机二级考试《JAVA》备考测试题「带答案」

2017计算机二级考试《JAVA》备考测试题「带答案」为确保同学们将所涉及的考点全面复习到位&#xff0c;让大家充满信心的步入考场&#xff0c;以下是百分网小编搜索整理的一份计算机二级考试《JAVA》备考测试题【带答案】&#xff0c;供参考练习&#xff0c;希望对大家有所帮助…

Thinkphp 关联模型和试图模型区别

关联模型主要在多表操作时使用&#xff0c;比如 user表&#xff0c;user_role表&#xff0c;role表 user_role字段&#xff1a;uid,rid&#xff0c;它作为中间表&#xff0c;负责将user和role之间的&#xff0c;1对1&#xff0c;1对多&#xff0c;多对多的关系进行保存。 这时要…

windows7下安装php的imagick和imagemagick扩展教程

这篇文章主要介绍了windows7下安装php的imagick和imagemagick扩展教程,同样也适应XP操作系统,Win8下就没测试过了,需要的朋友可以参考下 最近的PHP项目中&#xff0c;需要用到切图和缩图的效果&#xff0c;在linux测试服务器上很轻松的就安装好php imagick扩展。但是在本地wind…

java 线程间通信 handler_Handler不同线程间的通信

转http://www.iteye.com/problems/69457Activity启动后点击一个界面按钮后会开启一个服务(暂定为padService)&#xff0c;在padService中会启动一个线程(暂定为Thread-3)发起Socket连接。我们项目中使用mina作为socket通信框架&#xff0c;用过mina的同志们应该熟悉&#xff0c…

通过mysql show processlist 命令检查mysql锁的方法

作者&#xff1a; 字体&#xff1a;[增加 减小] 类型&#xff1a;转载 时间&#xff1a;2010-03-07show processlist 命令非常实用&#xff0c;有时候mysql经常跑到50%以上或更多&#xff0c;就需要用这个命令看哪个sql语句占用资源比较多&#xff0c;就知道哪个网站的程序问题…

java流类图结构_java学习之IO流(学习之旅,一)

个人在学习IO流的时候看到如下所示java 流类图结构的时候&#xff0c;我的感想是&#xff0c;这么多处于蒙的状态。Java流类图结构这么多&#xff0c;没有分类不好学&#xff0c;那我们就慢慢一口一口的吃&#xff0c;这样每天学习一点就好了&#xff0c;其实很多类并不是常用的…

php 安装xdebug扩展

php 扩展获取地址 http://pecl.php.net/package/ 编译安装的过程 wget http://pecl.php.net/get/xdebug-2.2.2.tgz tar -zxvf xdebug-2.2.2.tgz cd xdebug-2.2.2/ /data/klj/php/bin/phpize ./configure --enable-xdebug --with-php-config/data/klj/php/bin/php-config mak…

通过VB向SQL Server数据库中录入数据

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)一、数据录入通过VB向SQL Server数据库中录入数据&#xff0c;可以使用数据绑定控件录入数据与使用SQL语句录入1.利用数据绑定控件录入数据使用数据绑定控件录入数据可以运行较少的代码&…