建造一个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. Spring之AOP注解配置

    1.导入相应jar包 2.引入约束并配置XML文件 <beans xmlns="http://www.springframework.org/schema/beans" xm ...

  2. Java之List使用场景

    1.List使用场景 特点: ①在 List集合中允许出现 重复元素 <通过元素的equals方法,来比较是否为重复的元素.> ②所有元素是以一种 线性方式进行存储 ③List集合还有一个 ...

  3. jquery 绑定文本即时查询功能

    bindFilterFunc: function () {             if ("\v" == "v") { // IE only          ...

  4. 【bzoj4676】 两双手

    http://www.lydsy.com/JudgeOnline/problem.php?id=4767 (题目链接) 题意 求在网格图上从$(0,0)$走到$(n,m)$,其中不经过一些点的路径方案 ...

  5. CODE FESTIVAL 2017 qual B 题解

    失踪人口回归.撒花\^o^/ 说来真是惭愧,NOI之后就没怎么刷过题,就写了几道集训队作业题,打了几场比赛还烂的不行,atcoder至今是蓝名=.= 以后还是多更一些博客吧,我可不想清华集训的时候就退 ...

  6. svn查看日志(show log)显示时间为1970的解决方法

    问题: 在修改文件后show log无法显示日志,上面的时间会自动在2016年和1970年间跳,而且设置不了时间.解决方法:1.编辑svnserve.conf,设置“anon-access=none” ...

  7. 弹指之间 -- Waltz

    CHAPTER 18 华尔兹 Waltz 示例歌曲:白桦林,丁香花

  8. 在同一个表中将varchar2类型的数据转存到blob类型的字段中

    用一条修改语句即可:update t_content set f_body=rawtohex(f_check) where f_type in (0,4)此处须用rawtohex()函数将f_chec ...

  9. 第七节 认识SpringMVC中的表单标签

    所谓成熟,就是:你要习惯,任何人的忽冷忽热:也要看淡,任何人的渐行渐远: --胖先生 SpringMVC的表单标签 回顾: JSTL标签 --C标签 FMT标签 自学:JSP如何自定义标签[开源社区当 ...

  10. SQL记录-PLSQL日期与时间

    PL/SQL日期及时间 PL/SQL提供两个日期和时间相关的数据类型: 日期时间(Datetime)数据类型 间隔数据类型 datetime数据类型有: DATE TIMESTAMP TIMESTAM ...