2013-08-06 75 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(); 
    } 
}