iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 25
0
自我挑戰組

Framework 設計原則系列 第 25

使用原則(2) - Attributes, Uri

  • 分享至 

  • xImage
  •  

Attributes

Attributes是用來註釋(annotation) assemblies, typs, members and parameters

使用中刮號[]加在要被註釋的元件上面,如下

[AttributeUsage(...)]
public class NameAttribute : Attribute{
    ...
}

並且可以不只一個Attributes

  1. 繼承Attribute,並且於檔案名稱後面加上Attribute
public class NameAttribute : Attribute
  1. 使用AttributeUsageAttribute來客製化
[AttributeUsage(...)]
public class NameAttribute
  1. 非必要選項提供set
    如下面例子,Age不是必填,所以提供set
public class NameAttribute : Attribute{
    public int Age {get{...} set{...}}
}
  1. 必要選項只提供get,由建構子給值
    必填欄位不要輕易提供set讓任何人修改,反而是在建構子給值
    這樣在new一個NameAttribute就能確保userName有值
public class NameAttribute : Attribute{
    public NameAttribute(string userName) {...}
    public string UserName { get{....} }
}
  1. 延續上面兩個規則,請避免在建構子中傳入非必填的值
    不要這樣,Age不是必填,所以給了set,卻又在建構子強制給值
// Don't do this
public class NameAttribute : Attribute{
    public NameAttribute(int age) {...}
    public int Age {get{...} set{...}}
}
  1. 避免overload客制的建構子

  2. 如果要加快搜尋速度,苦以使用sealed

public sealed class NameAttribute : Attribute {...}

Uri

Uri 全名為 uniform resource identifier,用字串來識別資源

  1. 使用System.Uri表示URI 及 URL

  2. 傳入Uri型態的方法,可以考慮多加一個傳入string的overload

public void NavigeteTo(Uri location){...}
pubilc void NavageteTo(string location){
    NavigeteTo(new Uri(location);
}
  1. 但是不要每個傳入Uri型態的方法,都多一個string的overload
    根據需要的情境選擇性overload即可

  2. 實做System.Uri時,call the Uri-based overloads

  3. 不要把URI/URL資料存成string
    即使傳入string,也要轉換成Uri使用

public class SomeResource{
    Uri location;
    public SomeResource(string location){
        this.location = new Uri(location);
    }
    public SomeResource(Uri location){
        this.location = new location;
    }
}

上一篇
Arrays, Collections 使用注意事項
下一篇
使用原則(3) - DateTime, DateTimeOffset
系列文
Framework 設計原則30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言