• [学习笔记]工厂方法用于数据库开发


    摘自《大话设计模式》一书。

    程序入口:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 using System.Reflection;
     5 using System.Configuration;
     6 
     7 namespace 抽象工厂模式
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             User user = new User();
    14             Department dept = new Department();
    15 
    16             IUser iu = DataAccess.CreateUser();
    17 
    18             iu.Insert(user);
    19             iu.GetUser(1);
    20 
    21             IDepartment id = DataAccess.CreateDepartment();
    22             id.Insert(dept);
    23             id.GetDepartment(1);
    24 
    25             Console.Read();
    26         }
    27     }
    28 }
    Main

    工厂方法:

     1 class DataAccess
     2     {
     3         private static readonly string AssemblyName = "抽象工厂模式";
     4         private static readonly string db = ConfigurationManager.AppSettings["DB"];
     5         
     6         public static IUser CreateUser()
     7         {
     8             string className = AssemblyName + "." + db + "User";
     9             return (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
    10         }
    11 
    12         public static IDepartment CreateDepartment()
    13         {
    14             string className = AssemblyName + "." + db + "Department";
    15             return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className);
    16         }
    17     }

     数据实体类User和Department:

     1    class User
     2     {
     3         private int _id;
     4         public int ID
     5         {
     6             get { return _id; }
     7             set { _id = value; }
     8         }
     9 
    10         private string _name;
    11         public string Name
    12         {
    13             get { return _name; }
    14             set { _name = value; }
    15         }
    16     }
     1  class Department
     2     {
     3         private int _id;
     4         public int ID
     5         {
     6             get { return _id; }
     7             set { _id = value; }
     8         }
     9 
    10         private string _deptName;
    11         public string DeptName
    12         {
    13             get { return _deptName; }
    14             set { _deptName = value; }
    15         }
    16     }

     数据操作:

    1   interface IUser
    2     {
    3         void Insert(User user);
    4 
    5         User GetUser(int id);
    6     }
     1   class SqlserverUser : IUser
     2     {
     3         public void Insert(User user)
     4         {
     5             Console.WriteLine("在Sqlserver中给User表增加一条记录");
     6         }
     7 
     8         public User GetUser(int id)
     9         {
    10             Console.WriteLine("在Sqlserver中根据ID得到User表一条记录");
    11             return null;
    12         }
    13     }
    SqlserverUser : IUser
     1  class AccessUser : IUser
     2     {
     3         public void Insert(User user)
     4         {
     5             Console.WriteLine("在Access中给User表增加一条记录");
     6         }
     7 
     8         public User GetUser(int id)
     9         {
    10             Console.WriteLine("在Access中根据ID得到User表一条记录");
    11             return null;
    12         }
    13     }
    AccessUser : IUser
    1  interface IDepartment
    2     {
    3         void Insert(Department department);
    4 
    5         Department GetDepartment(int id);
    6     }
     1  class SqlserverDepartment : IDepartment
     2     {
     3         public void Insert(Department department)
     4         {
     5             Console.WriteLine("在Sqlserver中给Department表增加一条记录");
     6         }
     7 
     8         public Department GetDepartment(int id)
     9         {
    10             Console.WriteLine("在Sqlserver中根据ID得到Department表一条记录");
    11             return null;
    12         }
    13     }
    SqlserverDepartment : IDepartment
     1  class AccessDepartment : IDepartment
     2     {
     3         public void Insert(Department department)
     4         {
     5             Console.WriteLine("在Access中给Department表增加一条记录");
     6         }
     7 
     8         public Department GetDepartment(int id)
     9         {
    10             Console.WriteLine("在Access中根据ID得到Department表一条记录");
    11             return null;
    12         }
    13     }
    AccessDepartment : IDepartment

     以前总是把IUser接口这样的操作也写到数据库视图中,老是感觉不和谐。从抽象的角度看,数据库操作并不是实体User的必须方法,而且我也不是什么时候都需要调用数据的,如果把实体中增加了数据库操作方法,调用者恶意调用多麻烦!这里再分一个抽象的IUser专门管理数据库操作还是很好的。

  • 相关阅读:
    2019-2020-3 20175324 王陈峤宇《网络对抗技术》Exp3 免杀原理与实践
    2019-2020-2 20175324 王陈峤宇《网络对抗技术》Exp2 后门原理与实践
    2019-2020-3 20175324王陈峤宇《网络对抗技术》Exp1 PC平台逆向破解
    2019-2020- 20175324王陈峤宇 Exp0 环境搭建-KALI LINUX安装
    2019-2020-2 20175330杨璟旭《网络对抗技术》Exp9 Web安全基础
    2019-2020-2 网络对抗技术 20175330 Exp8 Web基础
    2019-2020-2 网络对抗技术 20175330 Exp7 网络欺诈防范
    2019-2020-2 网络对抗技术 20175330杨璟旭 Exp6 MSF基础应用
    2019-2020-2 20175330杨璟旭《网络对抗技术》Exp5信息搜集与漏洞扫描
    2019-2020-2 20175330杨璟旭《网络对抗技术》Exp4 恶意代码分析
  • 原文地址:https://www.cnblogs.com/yhlx125/p/3559218.html
Copyright © 2020-2023  润新知