DDD领域模型企业级系统Linq的CRUD(一)

建造一个Product Module类:

 ProductDBContextDataContext dbcontext = new
      ProductDBContextDataContext();
      public List<Product> GetProducts()
      {
          var query = dbcontext.Product.Where(p => p.cid == 1).ToList();
          return query;
      }

      public object GetProductCS()
      {
          var query = from c in dbcontext.ProductCategory
                      join p in dbcontext.Product on c.cid equals p.cid
                      where p.cid == 1
                      select new { CName = c.cname, PName = p.pname, UnitPrice = p.unitprice };
          return query.ToList();
       }

      public List<Product> GetAllProducts(int skipcount, int currentpagecount)
      {
          var query = dbcontext.Product.Skip(skipcount).Take(currentpagecount).ToList();
          return query;
      }
      public void AddCP()
      {
          ProductCategory pc = new ProductCategory();
          pc.cid = 3;
          pc.cname = "c3";

          Product p1 = new Product();
          p1.pid = 5;
          p1.pname = "p5";

          Product p2 = new Product();
          p2.pid = 6;
          p2.pname = "p6";

          pc.Product.Add(p1);
          pc.Product.Add(p2);

          dbcontext.ProductCategory.InsertOnSubmit(pc);
          dbcontext.SubmitChanges();

      }

      public void Modifyp()
      {
          var product = dbcontext.Product.Where(p => p.pid == 5).SingleOrDefault();
          product.unitprice = 200;
          dbcontext.SubmitChanges();
      }

      public void DeleteP()
      {
          var product = dbcontext.Product.Where(p => p.pid == 5).SingleOrDefault();
          dbcontext.Product.DeleteOnSubmit(product);
          dbcontext.SubmitChanges();

      }

      public void DeletePS()
      {
          var product = dbcontext.Product.Where(p => p.pid == 5).ToList();
          dbcontext.Product.DeleteAllOnSubmit(product);
          dbcontext.SubmitChanges();
      }

静态页面:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="LinqToSQLWeb._Default" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<asp:GridView ID="GridView1" runat="server">
    </asp:GridView>
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="显示产品" />
    <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="连接显示产品" />
    <br />
    <asp:TextBox ID="TextBox1" runat="server">1</asp:TextBox>
    <br />
    <asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="显示所有产品" />
    <asp:Button ID="Button4" runat="server" OnClick="Button4_Click" Text="上一页" />
    <asp:Button ID="Button5" runat="server" OnClick="Button5_Click" Text="下一页" />

    <br />
    <asp:Button ID="Button6" runat="server" OnClick="Button6_Click" Text="添加" />
    <asp:Button ID="Button7" runat="server" OnClick="Button7_Click" Text="修改" />
    <asp:Button ID="Button8" runat="server" OnClick="Button8_Click" Text="删除" />

</asp:Content>

后台类:

  Product.Domain.Products products =
            new Product.Domain.Products();
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button3_Click(object sender, EventArgs e)
        {
            TextBox1.Text = "1";
            GetProductsBinding(2);
        }

        protected void Button4_Click(object sender, EventArgs e)
        {
            if (int.Parse(TextBox1.Text) > 0)
            {
                TextBox1.Text = (int.Parse(TextBox1.Text) - 1).ToString();
            }
            GetProductsBinding(2);
        }

        protected void Button5_Click(object sender, EventArgs e)
        {
            TextBox1.Text = (int.Parse(TextBox1.Text) + 1).ToString();
            GetProductsBinding(2);
        }

        private void GetProductsBinding(int count)
        {
            List<Product.Domain.Product> allproducts;
            if (int.Parse(TextBox1.Text) == 0)
            {
                allproducts = products.GetAllProducts(0, count).ToList();
            }
            allproducts = products.GetAllProducts((int.Parse(TextBox1.Text) - 1) * 2, count);
            GridView1.DataSource = allproducts;
            GridView1.DataBind();
        }

        protected void Button6_Click(object sender, EventArgs e)
        {
            products.AddCP();
        }

        protected void Button7_Click(object sender, EventArgs e)
        {
            products.Modifyp();
        }

        protected void Button8_Click(object sender, EventArgs e)
        {
            products.DeleteP();
        }

EF的实例:

 ProductSystemModelContainer productdbcontext = new ProductSystemModelContainer();

       public List<Product> GetAllProduct(int page,int count)
       {
           var query = productdbcontext.Product.Skip(page * count).Take(count).ToList();
           return query;
       }

       public object GetAllPC(int page, int count)
       {
           var query = productdbcontext.ProductCategory.Join(productdbcontext.Product, c => c.Id, p => p.ProductCategory.Id,
               (c, p) => new { CName = c.CategoryName, PName = p.ProductName, UnitPrice = p.UnitPrice }).OrderBy(p=>p.UnitPrice).Skip(page * count).Take(count).ToList();
           return query;
       }

       public void AddProduct()
       {
           ProductCategory c = new ProductCategory();
           c.Id = Guid.NewGuid();
           c.CategoryName = "c1";
           Product p = new Product();
           p.Id = Guid.NewGuid();
           p.ProductName = "p1";
           p.UnitPrice = 80;
           p.ProductCategory = c;

           productdbcontext.Set<ProductCategory>().Add(c);
           productdbcontext.Set<Product>().Add(p);

           productdbcontext.SaveChanges();

       }

       public void ModifyProduct()
       {
           var product = productdbcontext.Product.Where(p => p.ProductName == "p1").FirstOrDefault();
           product.UnitPrice = 55;
           productdbcontext.Entry(product).State =
               System.Data.Entity.EntityState.Modified;
           productdbcontext.SaveChanges();

       }

       public void RemoveProduct()
       {
           var product = productdbcontext.Product.Where(p => p.ProductName == "p1").FirstOrDefault();
           productdbcontext.Set<Product>().Remove(product);
           productdbcontext.SaveChanges();
       }

前端代码:

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">

    <br />
<asp:TextBox ID="TextBox1" runat="server">0</asp:TextBox>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="创建" />
    <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="上一页" />
    <asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="下一页" />
    <asp:Button ID="Button4" runat="server" OnClick="Button4_Click" Text="修改" />
    <asp:Button ID="Button5" runat="server" OnClick="Button5_Click" Text="销毁" />

</asp:Content>

后台代码:

 LINQEFService efservice = new LINQEFService();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Bind();
            }
        }

        private void Bind()
        {
            var result = efservice.GetAllPC(int.Parse(TextBox1.Text), 2);
            GridView1.DataSource = result;
            GridView1.DataBind();
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            efservice.AddProduct();
            Bind();
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            if (int.Parse(TextBox1.Text) > 0)
            {
                TextBox1.Text = (int.Parse(TextBox1.Text) - 1).ToString();
                Bind();
            }

        }

        protected void Button3_Click(object sender, EventArgs e)
        {
            TextBox1.Text = (int.Parse(TextBox1.Text) + 1).ToString();
            Bind();
        }

        protected void Button4_Click(object sender, EventArgs e)
        {
            efservice.ModifyProduct();
            Bind();
        }

        protected void Button5_Click(object sender, EventArgs e)
        {
            efservice.RemoveProduct();
            Bind();
        }

直接实例化服务端的弊端:

Service  Locator体系架构模式:

实例:

定义接口:IPrintService

public interface IPrintService
    {
        string Print(string msg);
    }

子类PrintSerivceNew:

public class  PrintSerivceNew:IPrintService
    {
        public string Print(string msg)
        {
            return "SerivceNew:" + msg;
        }
    }

子类:PrintService

 public class PrintService : IPrintService
    {
        public string Print(string msg)
        {
            return "Serivce1:" + msg;
        }
    }

服务工厂ServiceFactory

 public abstract class ServiceFactory
    {
        public object GetService()
        {
            return this.DoGetService();
        }

        public abstract object DoGetService();

        public abstract Type SerivceType { get; }
    }

具体实现工厂:PrintServiceFactory

public class PrintServiceFactory:ServiceFactory
    {
        public override object DoGetService()
        {
            return new PrintSerivceNew();
        }

        public override Type SerivceType
        {
            get
            {
                return typeof(IPrintService);
            }
        }
    }

具体的业务:

  public class ServiceLocator
    {
        private Dictionary<Type, ServiceFactory> servicedics =
            new Dictionary<Type, ServiceFactory>();
        public ServiceLocator()
        {
            foreach(var type in this.GetType().Assembly.GetExportedTypes())
            {
                if(type.IsSubclassOf(typeof(ServiceFactory)))
                {
                    var factory = (ServiceFactory)Activator.CreateInstance(type);
                    servicedics.Add(factory.SerivceType, factory);
                }
            }
        }

        public object GetServiceByType(Type type)
        {
            var factory = servicedics[type];
            return factory.GetService();
        }
    }

调用:

static void Main(string[] args)
        {
            ServiceLocator servicelocator =
                new ServiceLocator();
            var objectservice=servicelocator.GetServiceByType(typeof(IPrintService));
            Console.WriteLine((objectservice as IPrintService).Print("hello"));
            Console.ReadLine();
        }
时间: 2024-10-12 16:42:33

DDD领域模型企业级系统Linq的CRUD(一)的相关文章

DDD领域模型企业级系统(一)

领域模型的基本构造块: 1.实体(Entity):有业务生命周期,使用标识进行跟踪. 2.值对象(Value Object):无业务生命周期,用来描述实体. 3.服务(Service):无状态的行为类型,表示某种能力. 4.聚合(Aggregate): 1).聚合是一簇相关联的对象,出于封装的目的,将这些对象作为一个单元(业务.持久化和并发). 2).每个聚合都有一个边界和一个根. 3).边界定义了聚合中应该包含什么. 5.聚合根(Aggregate Root) 1).根是聚合中唯一允许被外部引

企业级系统架构设计技术与互联网应用技术结合主题一 大规模并发性能问题探讨

何谓大规模并发,不同层面有不同的理解 企业应用(Intranet):千级强并发,万级弱并发(在线用户),十万级用户 大型企业ERP.供应链,大型企业HR.办公OA 互联网应用(Internet):百万级强并发,千万级弱并发(在线用户),亿级用户/ 门户网站(新浪.腾讯) 平台级电子商务(阿里巴巴.淘宝网.拍拍网) 搜索引擎(百度) 电子商务企业应用(Intranet + Internet):十万级强并发,百万级弱并发(在线用户),千万级用户 B2C电子商务(京东.凡客.一号店) 垂直型电子商务(

谈谈对于企业级系统架构的理解

在我们刚开始学习架构的时候,首先会想到分层的概念,分层架构比较经典的是三层架构,那么,什么是三层架构呢?它包括表现层,业务层,数据访问层:而对于一个新手来说,从抽象意义上的三层架构,逻辑上就划分为三个层. 这个是最基本的三层架构模式. 表现层充当系统的界面呈现以及UI逻辑的角色,也就是说,UI(用户界面)属于表现层: 举一个对于asp.net WebForm来说,人们喜欢把对于UI的控制逻辑(服务器控件的读取.设置.事件等等)写在页面的后置隐藏代码中,并且依赖业务逻辑层.当然,服务器控件支持数据

谈谈对于企业级系统架构的理解(转)

原文地址:http://www.cnblogs.com/liping13599168/archive/2011/05/11/2043127.html 在我们刚开始学习架构的时候,首先会想到分层的概念,分层架构比较经典的是三层架构,那么,什么是三层架构呢?它包括表现层,业务层,数据访问层:而对于一个新手来说,从抽象意义上的三层架构,逻辑上就划分为三个层. 这个是最基本的三层架构模式. 表现层充当系统的界面呈现以及UI逻辑的角色,也就是说,UI(用户界面)属于表现层: 举一个对于asp.net We

Nagios:企业级系统监控方案

http://www.cnblogs.com/shanyou/archive/2012/08/07/2627219.html

企业级业务系统开发实战

通过一个系列讲述一个真实企业的ERP系统开发全过程.其中包括需求分析.设计建模.开发.测试全生命周期过程,其中会详细讲方法论与技术实践.涉及到的方法包括敏捷软件开发.四色原型.领域驱动设计.业务架构.技术架构与具体的EF.WF.EasyUI等技术在项目中的使用. 领域驱动设计案例之领域层框架搭建 摘要: 根据前面对领域驱动设计概念以及一些最佳实践的理解,领域模型是系统最核心的部分,我们还是采用前面销售订单的例子,这个案例系统的核心构建就从领域层开始.领域层框架搭建主要完成两个任务:1.领域模型的

从0 开始 WPF MVVM 企业级框架实现与说明 ---- 第七讲 WPF 系统UI结构说明与AvalonDock的使用

说到WPF UI, 现在网上到处都有现成的UI, 我觉得还是AvalonDock算是比较适合企业级系统点,一般向ModernUI之类的只能做做小的App还凑合这用. 这边我分享一个DLL, AvalonDock.dll 访问密码 2f90 , 你们可以去下载,后面我们的demo中就是用这样一种UI结构. 其实对于一个系统的设计,我们要考虑到整体的业务逻辑,数据结构,业务需求与拓展等各方面,我这主要还是分模块一步步慢慢介绍下去,没有具体的项目,我就分模块去慢慢介绍. 这里就说Avalondock的

MyBatis知多少(18)MyBatis系统

小型.简单系统 小型应用程序通常只涉及单个数据库,只有一些相当简单的用户界面和领域模型.它的业务逻辑非常简单,甚至对一些简单的CRUD (Create, Read, Update, Delete:增删查改)应用程序来说可能根本就不存在.MyBatis之所以非常适合于小型应用程序,有3个原因. 第一,MyBatis本身就很小并且简单.它不需要服务器或者其他任何类型的中间件.根本不需要任何额外的基础设施.MyBatis也没有任何第三方依赖.MyBatis的最简安装只需 要2个JAR文件,总计不过37

NET中小型企业级项目开发架构系列(一)

前端时间我们开发了基于Net的一套搭建sprint.NET+NHibernate+MVC+WCF+EasyUI等中小型企业级系统开发平台,现在把整个开发过程中的步步进展整理出来和大家分享,这个系列可能有点长,多多指导学习.        我们的底层开发平台是sprint.NET+NHibernate+MVC+WCF+EasyUI方式开发,顺便加点Spring.net注入的部分,当然我们最主要的关于权限设计.业务设计,而架构,咱们没有学过太复杂的架构,我们还是以最常用的MVC架构开始拓展 参考材料