惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
J
Java Code Geeks
雷峰网
雷峰网
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
V
Vulnerabilities – Threatpost
S
Securelist
The Hacker News
The Hacker News
The Register - Security
The Register - Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
G
Google Developers Blog
Hugging Face - Blog
Hugging Face - Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
AI
AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Schneier on Security
Schneier on Security
N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
Hacker News - Newest:
Hacker News - Newest: "LLM"
H
Hacker News: Front Page
博客园 - 司徒正美
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
B
Blog
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
Security Latest
Security Latest
Engineering at Meta
Engineering at Meta
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
U
Unit 42
V
V2EX
V2EX - 技术
V2EX - 技术
L
LINUX DO - 最新话题
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
Recorded Future
Recorded Future
P
Privacy & Cybersecurity Law Blog
美团技术团队
小众软件
小众软件
F
Fortinet All Blogs

博客园 - idior

每日代码 - 7/1 减小方法参数的依赖 每日代码 - 6/28 代码逻辑分组 每日代码 - 6/26 lambda表达式 每日代码 - 6/27 避免创建非法对象 Resume Covariance and Contravariance How does ElementName Binding work? Weird behavior of DataContext Inheritance How does ElementName Binding work – Part 3 InheritanceContext How does ElementName Binding work – Part 2 BindingExpression Logical Tree & Visual Tree Memory leak caused by EventHandle - weak event Resources on Debugging/Tracing WPF How does ElementName Binding work? - Part 1 Logical Tree & NameScope Inside WCF Runtime 有谁准备参加10月份的MVP聚会? MVP聚会 Practical .NET2 and C#2 翻译样章 Be evil or not?
每日代码 - 6/29 读写分离
idior · 2013-06-28 · via 博客园 - idior
public class CartMainTypeSelector {
public static void selectCartMainType(CartContext context,CartOption options){
Params params = context.getParams();
if (params != null && params.isMiniCart()) {
options.cartType = CartType.MINI_CART;
return;
} 
if(context.getShopId() > 0){
options.cartType = CartType.SHOP_TYPE;
} 
}

一个很常见的方法,从参数一中读值,根据判断和计算,修改参数二的值。

根据CQS(command query seperation)的思想,一个方法最好要么做查询,要么负责更新对象的状态。这样对于那么做查询的方法,我们就会很放心,因为我们可以以任意顺序和次数调用它们,并且它们的结果在大多数情况下都是可以预料的,不变的。

public class CartMainTypeSelector {
public static CartType getCartMainType(CartContext context){
Params params = context.getParams();
if (params != null && params.isMiniCart()) {
return CartType.MINI_CART;
} 
if(context.getShopId() > 0){
return CartType.SHOP_TYPE;
} 
}


 比较一下下面两段代码的可读性和安全性(从副作用的角度看)

CartOption option = ...;
CartContext context = ...;
option.cartType=getCartMainType(context);


CartOption option = ...;
CartContext context = ...;
selectCartMainType(context,option);