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的更多相关文章

  1. C# Best Practices - Creating Good Properties

    Coding Properties Code in the Getter Check the user's credentials Check application state Format the ...

  2. 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 ...

  3. zookeeper kazoo Basic Usage

    http://kazoo.readthedocs.org/en/latest/basic_usage.html Basic Usage Connection Handling To begin usi ...

  4. 转: angular编码风格指南

    After reading Google's AngularJS guidelines, I felt they were a little too incomplete and also guide ...

  5. [转]JavaScript Namespaces and Modules

    Namespaces In most programming languages we know the concept of namespaces (or packages).Namespaces ...

  6. SAP HANA学习资料大全[非常完善的学习资料汇总]

    Check out this SDN blog if you plan to write HANA Certification exam http://scn.sap.com/community/ha ...

  7. Sonar 常用代码规则整理(一)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...

  8. 单元测试系列之九:Sonar 常用代码规则整理(一)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...

  9. Mocks Aren't Stubs

    Mocks Aren't Stubs The term 'Mock Objects' has become a popular one to describe special case objects ...

随机推荐

  1. Linux下C编程通过宏定义打开和关闭调试信息

    GCC支持宏定义 gcc -Dmacro,将macro定义为1,我们可以利用这点在我们的代码中加入宏定义开关. #ifdef DEBUG #define pdebug(format, args...) ...

  2. 阿里云ECS每天一件事D7:安装tomcat8.0

    这一D,跨越了几个月啊,人是越来越懒,集中写一些,就懒得再记录了.也是因为测试需要,搭建个jsp的服务环境,只是测试,考虑用tomcat就够了. 在Tomcat官网下载最新Core版本,下载之后,将文 ...

  3. android小知识之EditText输入框之值监控以及类型限制(数字,英语字母,下划线,是否为星号密码)

    1.设置EditText的值监听事件 . <span style="font-size:14px;color:#990000;"> EditText ed=new Ed ...

  4. 修改Eclipse的WorkSpace保持数[转载]

    最近用Eclipse开发特别多,我个人习惯每一个项目一个WorkSpace,这样的话代码干净.而且当项目之前编码规范不一样时,也不会彼此影响.但项目一多,Eclipse默认只保存5个WorkSpace ...

  5. 深入剖析PE文件

    不赖猴的笔记,转载请注明出处. 深入剖析PE文件 PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一.   ...

  6. Windows Azure 现已完全受 Juju 支持

    我们很高兴地宣布,Windows Azure 现已完全受 Juju 支持,这也是我们为实现开放性和互操作性而不断努力的结果.这意味着 Ubuntu 用户现在可以使用 Juju 及其直观的图形用户界面设 ...

  7. Uber司机手机终端问答篇

    手机客户端 Q:自带安卓手机可以使用吗? A:安卓终端已经推出,请在微信页面点左下菜单选取“下载司机端APP”查看! Q:对自带苹果手机的要求? A:4S型号及以上且未越狱:使用3G或4G网络 Q:客 ...

  8. HDFS 2中Namenode启动时WebUI的变化

      在HDFS1中NameNode启动顺序是这样的: 1. 读取Fsimage文件 2. 读取edit logs文件,逐行执行里面的操作 3. 写checkpoint,生成新的Fsimage(老的Fs ...

  9. MRC下单例模式的内存问题与ARC实现

    单例模式保证一个类只能拥有一个静态的实例,类负责创建与维护这个实例,并提供一个统一的静态(类方法)访问方式,并封锁了这个类外部的代码对这个类对象的创建. .h文件: #import <Found ...

  10. 命令行方式运行yii2程序

    测试环境,yii 2.0.3版本 web访问方式,控制器放在controllers目录下 ,浏览器访问如下地址 http://127.0.0.1/index.php?r=[controller-nam ...