建造一个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();
}

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

  1. DDD领域模型企业级系统(二)

    用户层: 1.请求应用层获取用户显示的信息 2.发送命令给应用层要求执行某个命令 应用层: 对用户界面提供各种应用功能(包括信息获取与命令执行),应用层不包含业务逻辑,业务层是由应用层调用领域层(领域 ...

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

    领域模型的基本构造块: 1.实体(Entity):有业务生命周期,使用标识进行跟踪. 2.值对象(Value Object):无业务生命周期,用来描述实体. 3.服务(Service):无状态的行为类 ...

  3. DDD领域模型企业级系统Unity(五)

    添加程序集: 写一个接口: public interface IPlayer { void Play(); } 两个实现类: public class NewPlay : IPlayer { publ ...

  4. DDD领域模型企业级系统(三)

    相关代码: public static void ShowArray() { //数据源 int[] arrayas = new int[] { 1, 2, 3, 4 }; //创建查询 var qu ...

  5. DDD领域模型和充血对象

    DDD领域模型 官方说法 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略 ...

  6. 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户

    阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...

  7. 领域模型中的实体类分为四种类型:VO、DTO、DO、PO

    http://kb.cnblogs.com/page/522348/ 由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念: 概念: V ...

  8. Linux系统运维笔记(四),CentOS 6.4安装 MongoDB

    Linux系统运维笔记(四),CentOS 6.4安装 MongoDB 1,下载 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6 ...

  9. Linux系统运维笔记(四),CentOS 6.4安装Nginx

    Linux系统运维笔记(四),CentOS 6.4安装Nginx 1,安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool op ...

随机推荐

  1. DELPHI动态创建窗体

    //第一种方式 procedure TForm1.btn1Click(Sender: TObject); begin With TForm2.Create(Application) do Try Sh ...

  2. Merkle Tree 概念

    Merkle Tree 概念 来源 https://www.cnblogs.com/fengzhiwu/p/5524324.html /*最近在看Ethereum,其中一个重要的概念是Merkle T ...

  3. 【bzoj4066】 简单题

    http://www.lydsy.com/JudgeOnline/problem.php?id=4066 (题目链接) 题意 维护一个矩阵,两个操作,给某一个元素加上A,求其中一个子矩阵的元素之和.强 ...

  4. DynamicSegmentTree

    最近尝试了一下动态开点线段树,英文直译就是Dynamic Open Point Segment Tree,太SB了. 就跟之前的主席树写法差不多. if(!x || x == y) { x = ++t ...

  5. 【洛谷P1823】音乐会的等待 单调栈+二分

    题目大意:给定一个长度为 N 的序列,定义两个数 \(a[i],a[j]\) 相互看得见,意味着 \(\forall k\in [i+1,j-1],a[k]\le a[i],a[k]\le a[j]\ ...

  6. OpenStack 计算服务 Nova计算节点部署(八)

    如果使用vmware虚拟机进行部署,需要开启虚拟化:如果是服务器需要在bios上开启. nova计算节点IP是192.168.137.12 环境准备 安装时间同步 yum install ntpdat ...

  7. DataGridView更新数据到数据库

    WinFrom程序绑定了一个DataGridView控件,我需要添加一个button按钮来更改状态,还需要把更新之后的状态更新到数据库,如下图所示的这样: 首先先来拖控件,把界面做出来,自己拖一个Da ...

  8. .net 里面打不出来ConfigurationManager

    ConfigurationManager 这个东东是读取配置文件时需要的. 首先要引用命名空间里面 using System.Configuration; 其次呢,在解决方案的引用里,单机右键进行添加

  9. OpenStack中RabbitMQ高可用性配置

    采用镜像队列的方案进行配置 1. 网络拓扑 node1:10.10.11.1 node2:10.10.11.2 2. 配置hosts node1+node2: vim /etc/hosts >1 ...

  10. Spark记录-Scala数组

    Scala提供了一种数据结构叫作数组,数组是一种存储了相同类型元素的固定大小顺序集合.数组用于存储数据集合,但将数组视为相同类型变量的集合通常更为有用. 可以声明一个数组变量,例如:numbers,使 ...