在上面几篇中记录了如何系统如何实现与存储媒介通信以及系统的配置,下面说说系统的业务部分。在第一篇的示例图中可以看出,我将业务部分分为了人员管理部分和收发件管理部分,人员管理部分负责人员的增删改查,包括收件人和发件人,下面具体看看实现:
首先看看收件人部分:
using System; using System.Collections.Generic; using System.Text; namespace AccountInformation { public class Receiver { private string _userName; public Receiver(string userName) { this._userName = userName; } public string UserName { get { return _userName; } } } public class ReceiverHelper { /// <summary> /// 添加收件人 /// </summary> /// <param name="r"></param> public static void AddReceiver(Receiver r) { switch (AppSettings.AppSetting.appSetting.MailReceiveDBType) { case 0: { Utility.SqlHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailReceiveSqlConnstring, string.Format("insert into receiver(userName)values({0})", r.UserName)); break; } case 1: { Utility.AccessHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailReceiveAccessConnstring, string.Format("insert into receiver(userName)values({0})", r.UserName)); break; } case 2: { //mysql break; } } } /// <summary> /// 删除收件 /// </summary> /// <param name="r"></param> public static void DelReceiver(Receiver r) { switch (AppSettings.AppSetting.appSetting.MailReceiveDBType) { case 0: { Utility.SqlHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailReceiveSqlConnstring, string.Format("delete from receiver where userName={0}", r.UserName)); break; } case 1: { Utility.AccessHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailReceiveAccessConnstring, string.Format("delete from receiver where userName={0}", r.UserName)); break; } case 2: { //mysql break; } } } /// <summary> /// 改 /// </summary> /// <param name="r"></param> public static void EditReceiver(Receiver r) { switch (AppSettings.AppSetting.appSetting.MailReceiveDBType) { case 0: { Utility.SqlHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailReceiveSqlConnstring, string.Format("update receiver set userName={0} where userName={1}", r.UserName, r.UserName)); break; } case 1: { Utility.AccessHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailReceiveAccessConnstring, string.Format("update receiver set userName={0} where userName={1}", r.UserName, r.UserName)); break; } case 2: { //mysql break; } } } /// <summary> /// 查 /// </summary> /// <returns></returns> public static List<Receiver> SerchReceiver() { List<Receiver> receIverList = new List<Receiver>(); Receiver r; System.Data.DataTable dt = new System.Data.DataTable(); switch (AppSettings.AppSetting.appSetting.MailReceiveDBType) { case 0: { dt = Utility.SqlHelper.ExecuteDataTable(AppSettings.AppSetting.appSetting.MailReceiveSqlConnstring, "select * from receiver"); break; } case 1: { dt = Utility.SqlHelper.ExecuteDataTable(AppSettings.AppSetting.appSetting.MailReceiveAccessConnstring, "select * from receiver"); break; } case 2: { //mysql break; } case 3: { dt = Utility.ExcelHelper.ExecuteDataTable("Account//receiver.xls", 1); break; } case 4: { List<string> strList = Utility.IOHelper.ReadIO("Account//receiver.txt"); int rows = 0; foreach (string str in strList) { dt.Rows[rows][0] = strList[0]; rows++; } break; } } if (AppSettings.AppSetting.appSetting.MailReceiveSuffix != "") { for (int i = 0; i < dt.Rows.Count; i++) { r = new Receiver(dt.Rows[i][0].ToString() + AppSettings.AppSetting.appSetting.MailReceiveSuffix); receIverList.Add(r); } } else { for (int i = 0; i < dt.Rows.Count; i++) { r = new Receiver(dt.Rows[i]["userName"].ToString()); receIverList.Add(r); } } return receIverList; } } }
因为收件人只包含收件地址一个属性,所以收件人类非常简单,仅仅包含一个收件地址属性。再看看发件人实现:
using System; using System.Collections.Generic; using System.Text; namespace AccountInformation { public class Sender { private string _userName; private string _passWord; private string _smtp; private int _port; public Sender(string userName, string passWord, string smtp, int port) { this._userName = userName; this._passWord = passWord; this._smtp = smtp; this._port = port; } public string UserName { get { return _userName; } } public string PassWord { get { return _passWord; } } public string Smtp { get { return _smtp; } } public int Port { get { return _port; } } } public class SenderHelper { /// <summary> /// 增 /// </summary> /// <param name="s"></param> public static void AddSender(Sender s) { switch (AppSettings.AppSetting.appSetting.MailSendDBType) { case 0: { Utility.SqlHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailSendSqlConnstring, string.Format("insert into sender(userName,passWord,smtp,port)values({0},{1},{2},{3}", s.UserName, s.PassWord, s.Smtp, s.Port)); break; } case 1: { Utility.SqlHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailSendAccessConnstring, string.Format("insert into sender(userName,passWord,smtp,port)values({0},{1},{2},{3}", s.UserName, s.PassWord, s.Smtp, s.Port)); break; } case 2: { break; } } } /// <summary> /// 删 /// </summary> /// <param name="userName"></param> public static void DelSender(string userName) { switch (AppSettings.AppSetting.appSetting.MailSendDBType) { case 0: { Utility.SqlHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailSendSqlConnstring, string.Format("delete from sender where userName={0}", userName)); break; } case 1: { Utility.SqlHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailSendAccessConnstring, string.Format("delete from sender where userName={0}", userName)); break; } case 2: { break; } } } /// <summary> /// 改 /// </summary> /// <param name="s"></param> public static void EditSender(Sender s) { switch (AppSettings.AppSetting.appSetting.MailSendDBType) { case 0: { Utility.SqlHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailSendSqlConnstring, string.Format("update sender set passWord={0},smtp={1},port={2} where userName={3}", s.PassWord, s.Smtp, s.Port, s.UserName)); break; } case 1: { Utility.SqlHelper.ExecuteNonQuery(AppSettings.AppSetting.appSetting.MailSendAccessConnstring, string.Format("update sender set passWord={0},smtp={1},port={2} where userName={3}", s.PassWord, s.Smtp, s.Port, s.UserName)); break; } case 2: { break; } } } /// <summary> /// 查 /// </summary> /// <returns></returns> public static List<Sender> SerchSender() { List<Sender> senderList = new List<Sender>(); Sender s; System.Data.DataTable dt = new System.Data.DataTable(); switch (AppSettings.AppSetting.appSetting.MailSendDBType) { case 0: { dt = Utility.SqlHelper.ExecuteDataTable(AppSettings.AppSetting.appSetting.MailSendSqlConnstring, "select * from sender"); break; } case 1: { dt = Utility.SqlHelper.ExecuteDataTable(AppSettings.AppSetting.appSetting.MailSendAccessConnstring, "select * from sender"); break; } case 2: { //mysql break; } case 3: { dt = Utility.ExcelHelper.ExecuteDataTable("Account//sender.xls", 1); break; } case 4: { List<string> strList = Utility.IOHelper.ReadIO("Account//sender.txt"); int rows = 0; string[] strArr; foreach (string str in strList) { strArr = str.Split(','); dt.Rows[rows][0] = strArr[0]; dt.Rows[rows][1] = strArr[1]; dt.Rows[rows][2] = strArr[2]; dt.Rows[rows][3] = strArr[3]; rows++; } break; } } for (int i = 0; i < dt.Rows.Count; i++) { s = new Sender(dt.Rows[i]["userName"].ToString(), dt.Rows[i]["passWord"].ToString(), dt.Rows[i]["smtp"].ToString(), Convert.ToInt32(dt.Rows[i]["post"])); senderList.Add(s); } return senderList; } } }
发件人相对来说比较复杂,通过查询msdn我们知道,发件人需要发件人地址、发件邮件密码,SMTP地址和端口,主要的操作部分包括增删改查。代码相对来说非常简单,仅仅包括一个数据库的操作和类的定义,不过收件人和发件人这样实现导致了项目之间的依赖程度加大,如果想继续追求高内聚低耦合,可以仔细学习下微软的petshop,里面使用到了接口编程,将收件人和发件人对外公开的方法使用接口实现,具体的结构因为需要赶进度,所以没有仔细考虑,日后补上。