C# Best Practices - Creating Good Methods
How to Define a Method
Identify the problem => Define the single purpose => Specify the inputs and outputs => State any assumptions => Consider the error that could occur
Build a Method
Signature
public bool PlaceOrder(Product product, int quantity)
Optional accessibility modifier (Default is private)
Return type (void if no value)
Method name
Parameter list (Empty parenthesis if no parameters)
XML Document Comment
Use ///
Summary for method purpose
param for a description of each parameter
Signature Best Practices
Do:
Use a verb
Define the most restricted accessibility possible
Keep the number of parameters to a minimum
Define an XML document comment
Avoid:
Vague terms
Abbreviations
Conjunctions (and/or)
Inconsistent naming
Method Body
public bool PlaceOrder(Product product, int quantity)
{
// Guard Clause (garbage in,not garbage out)
if (product == null) throw new ArgumentNullException(nameof(product));
if (quantity <= ) throw new ArgumentOutOfRangeException(nameof(quantity));
}
Best Practices
Do:
Keep methods short (less than 20 lines)
Use white space
Use guard clause
Return an expected result (Use an object to return multiple values)
Implement exception handling
Avoid:
void methods
Property or Method
Property example:
ProductName, Description, InventoryCount?, SuggestedPrice?
Method example:
PlaceOrder(), CalculateInventoryCount()?, CalculateSuggestedPrice()?
Property:
Does it describe data?
Does it execute quickly?
Method:
Does it describe processing?
Does it produce side effects?
Does it require parameters?
Method Overloading
public bool PlaceOrder(Product product, int quantity) public bool PlaceOrder(Product product, int quantity, DateTimeOffset deliveryBy) public bool PlaceOrder(Product product, int quantity, DateTimeOffset deliberyBy, string instructions) public void PlaceOrder(Product prouct, int quantity) ** Not a valid overloading
Best Practices
Do:
Keep the number of parameters to a minimum
Keep the order of the parameters consistent
Define a XML document comment for each overload
Consider optional parameters
Avoid:
Confusing overloads
Overloads that differ in purpose
(Example: OrderItems. One overload get the ordered items, the second overload orders a set of items)
Duplicating code
Method chaining
public OperationResult PlaceOrder(Product product, int quantity)
{
return PlaceOrder(product, quantity, null, null);
} public OperationResult PlaceOrder(Product product, int quantity, DateTimeOffset? deliverBy)
{
return PlaceOrder(product, quantity, deliverBy, null);
} public OperationResult PlaceOrder(Product product, int quantity, DateTimeOffset? deliverBy)
{
// All of the code here
}
Method Chaining Best Practices
Do:
Use to minimize repeated code in method overloads
Consider optional parameters
Avoid:
If it adds complexity
Method Overriding
We can override ToString() for each entity class to make debug easy
FAQ
1.What's the primary purpose of a method?
To implement the logic required for specific behavior or functionality in a class
2.What is the difference between a parameter and an argument?
A parameter is part of the method signature
An argument is part of the method call
3.What is method overloading?
Methods with the same name and purpose but different signatures.
4.What is method chaining?
One method overload calls another overload to prevent repeated code.
5.When is it the best to use method overloading vs. method overriding?
Use overloading when one method requires multiple signatures. Such as GetCustomer(id) to get a customer by id and GetCustomer(name) to get a customer by name.
Use overriding when replacing a method defined high up the object hierarchy. Such as replacing the ToString() method.
C# Best Practices - Creating Good Methods的更多相关文章
- C# Best Practices - Creating Good Properties
Coding Properties Code in the Getter Check the user's credentials Check application state Format the ...
- OOP in JS Public/Private Variables and Methods
Summary private variables are declared with the 'var' keyword inside the object, and can only be acc ...
- zookeeper kazoo Basic Usage
http://kazoo.readthedocs.org/en/latest/basic_usage.html Basic Usage Connection Handling To begin usi ...
- 转: angular编码风格指南
After reading Google's AngularJS guidelines, I felt they were a little too incomplete and also guide ...
- [转]JavaScript Namespaces and Modules
Namespaces In most programming languages we know the concept of namespaces (or packages).Namespaces ...
- SAP HANA学习资料大全[非常完善的学习资料汇总]
Check out this SDN blog if you plan to write HANA Certification exam http://scn.sap.com/community/ha ...
- Sonar 常用代码规则整理(一)
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...
- 单元测试系列之九:Sonar 常用代码规则整理(一)
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...
- Mocks Aren't Stubs
Mocks Aren't Stubs The term 'Mock Objects' has become a popular one to describe special case objects ...
随机推荐
- vs 2013下自定义ASP.net MVC 5/Web API 2 模板(T4 视图模板/控制器模板)
vs 2013下自定义ASP.net MVC 5/Web API 2 模板(T4 视图模板/控制器模板): Customizing ASP.NET MVC 5/Web API 2 Scaffoldi ...
- 具有 CSA CCM 证明的 SOC 2 可简化 Windows Azure 客户的安全性评估过程
编辑人员注释:本文章由 Windows Azure 产品市场营销总监 Sarah Fender 撰写. 今天,我们宣布 Microsoft 的公共审计师 Deloitte 已经发布了有关 Window ...
- VIPS: a VIsion based Page Segmentation Algorithm
VIPS: a VIsion based Page Segmentation Algorithm VIPS: a VIsion based Page Segmentation Algorithm In ...
- Android Animation学习(二) ApiDemos解析:基本Animatiors使用
Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.ObjectAnimator.AnimatorSet ApiDemos中Animation部分是单独 ...
- .NET WIN7+IIS 7.5下URLRewriter组件伪静态设置
原文地址:WIN7+IIS 7.5伪静态的设置 --------------------------------------------------------偶是分割线君-------------- ...
- ajax 上传图片 并预览
<img {if !$article[pic]}style="display: none"{/if} width="82" height="6 ...
- Lowest Common Ancestor of a Binary Tree, with Parent Pointer
Given a binary tree, find the lowest common ancestor of two given nodes in tree. Each node contains ...
- VS的工程宏,比如$(SolutionDir) 的含义及查找
Configuration->General->Output Directory->单击编辑框点下拉箭头-> <Edit...> 图1 图2
- [Swust OJ 838]--最优价值(0-1背包+数学)
题目链接:http://acm.swust.edu.cn/problem/838/ Time limit(ms): 1000 Memory limit(kb): 10000 Description 我 ...
- pprint模块解析
pprint模块提供了打印任意python数据结构的方法,如果这个数据结构不是python的基本类型,则可能无法打印结果. pprint模块定义了一个类: pprint ...