2013-08-06 73 views
0

我只是好奇地想知道,因爲這段代碼的代碼複雜度爲16,如果我想在CC上達到完美的9/10,那麼最好的方法是什麼?我知道它不會殺了我,但我渴望學習,如果其他人會寫不同我該如何重構此代碼以減少CC

class SentMessages 
{ 
    public SentMessages() { } 
    public SentMessages(int id, string userName, string message, string messageType, DateTime createdAt) 
    { 
     this.Id = id; 
     this.UserName = userName; 
     this.Message = message; 
     this.CreatedAt = createdAt; 
     this.MessageType = messageType; 

    } 
    public string UserName { get; set; } 
    public int Id { get; set; } 
    public string Message { get; set; } 
    public string MessageType { get; set; } 
    public DateTime CreatedAt { get; set; } 

    public List<SentMessages> GetMessages() 
    { 
     if (AllMessages.Count == 0) AllMessages = SentMessages.InitializeMessages(); 
     return AllMessages; 
    } 
    public List<SentMessages> AllMessages = new List<SentMessages>(); 
    static private List<SentMessages> InitializeMessages() 
    { 
     List<SentMessages> messages = new List<SentMessages>(); 
     return messages; 
    } 
    public void ClearMessages() 
    { 
     AllMessages.Clear(); 
    } 
} 

我從http://objectlistview.sourceforge.net/cs獲得此代碼的概念驗證碼和stackoverlfow答案

+0

是的,我會寫這個不同。這是奇怪的。每次調用GetMessages都會創建新的AllMessages實例,直到消息被添加到集合中。如果沒有將所有消息插入到該集合的機制,它怎麼會是'AllMessages'? – Enigmativity

回答

2

我想你應該考慮的原則

Seperation of Concern

只是一些想法:

  • 創建工廠類以實例化新集合。
  • 創建Message「類作爲dataholder保持IdUsername性能
  • 創建一個自定義SentMessages類,它實現類似IList<SentMessage>

哦,GetMessages是沒有意義的。當列表爲空時調用它。但是,它會創建一個新的空列表。

+0

是的,謝謝。將看SoC – user1320651

1
public class SentMessage : Message, IMessage 
{ 
    public SentMessage(int id, string userName, string message, string messageType, DateTime createdAt) 
    { 
     Id = id; 
     UserName = userName; 
     Message = message; 
     CreatedAt = createdAt; 
     MessageType = messageType; 
    } 

    public string UserName { get; private set; } 
    public int Id { get; private set; } 
    public string Message { get; private set; } 
    public string MessageType { get; private set; } 
    public DateTime CreatedAt { get; private set; } 
} 

public class MessageCollection<T> where T : IMessage 
{ 
    private List<T> _messages; 

    public MessageCollection() 
    { 
     _messages = new List<T>(); 
    } 

    public IEnumerable<T> GetMessages() 
    { 
     return _messages; 
    } 

    public void AddMessage(T message) 
    { 
     _messages.Add(message); 
    } 

    public void ClearMessages() 
    { 
     _messages.Clear(); 
    } 
}