架构之旅~一个操作的返回要有一个标准,看我的公用消息类
当我们在开发过程中,遇到添加,编辑,删除等操作,这些操作对于数据库来都是成功的,所以在DATA层的CURD操作一般没有返回值,而对于业务层就不同的,我们需要将处理结果返回给WEB层,而如果DATA出现异常了,这时业务层要知道,并把结果进行处理,然后返回给WEB层,而返回的载体是我们要统一的,因为我们一个bool类型是不能满足要求的,它可以还会伴随其它信息,包括可能出现的实体完整信息。
看看我的VMessage类,它有一个属性IsComplete,它的值由它内部的messageList集合控制,而这个集合如果没有信息,说明没有异常出现,IsComplete就是true,反之它为false,而我们可以通过AddItemt 和Clear等集合操作对messageList进行追加,清除等操作。
好了,现在看一下大致的代码结构,大家可以直接应用到程序中:
1 /// <summary> 2 /// 通用消息序列类 3 /// </summary> 4 public class VMessage : IEnumerable<string> 5 { 6 /// <summary> 7 /// 是否完成 8 /// </summary> 9 public bool IsComplete 10 { 11 get 12 { 13 return messageList.Count == 0;//如果没有异常记录,返回返回为true 14 } 15 } 16 17 /// <summary> 18 /// 可以返回一个IEntity类型的实体 19 /// </summary> 20 public EntityBase Entity { get; set; } 21 22 /// <summary> 23 /// 消息序列 24 /// </summary> 25 List<string> messageList = new List<string>(); 26 27 /// <summary> 28 /// 向序列中添加新的项 29 /// </summary> 30 /// <param name="item"></param> 31 public void AddItem(string item) 32 { 33 this.messageList.Add(item); 34 } 35 36 /// <summary> 37 /// 向序列中追加一个新的序列 38 /// </summary> 39 /// <param name="itemRange">序列对象</param> 40 public void AddItemRange(IEnumerable<string> itemRange) 41 { 42 this.messageList.AddRange(itemRange); 43 } 44 /// <summary> 45 /// 消息对象 46 /// </summary> 47 public Object Object { get; set; } 48 49 /// <summary> 50 /// 清空所有现有项 51 /// </summary> 52 public void Clear() 53 { 54 this.messageList.Clear(); 55 } 56 57 /// <summary> 58 /// 索引器 59 /// </summary> 60 /// <param name="index">索引</param> 61 /// <returns>相应值</returns> 62 public string this[int index] 63 { 64 get { return this.messageList[index]; } 65 66 } 67 68 /// <summary> 69 /// 得到所有消息,每条用逗号分开 70 /// </summary> 71 /// <returns></returns> 72 public string GetMessage() 73 { 74 return string.Join(",", messageList); 75 } 76 #region IEnumerable<string> 成员 77 78 public IEnumerator<string> GetEnumerator() 79 { 80 return this.messageList.GetEnumerator(); 81 } 82 83 #endregion 84 85 #region IEnumerable 成员 86 87 IEnumerator IEnumerable.GetEnumerator() 88 { 89 return this.messageList.GetEnumerator(); 90 } 91 92 #endregion 93 }
应用在程序中,可能是这样的结构
BLL层:
而在WEB层直接调用它,可以判断它的VM结果