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();
}
DDD领域模型企业级系统Linq的CRUD(四)的更多相关文章
- DDD领域模型企业级系统(二)
用户层: 1.请求应用层获取用户显示的信息 2.发送命令给应用层要求执行某个命令 应用层: 对用户界面提供各种应用功能(包括信息获取与命令执行),应用层不包含业务逻辑,业务层是由应用层调用领域层(领域 ...
- DDD领域模型企业级系统(一)
领域模型的基本构造块: 1.实体(Entity):有业务生命周期,使用标识进行跟踪. 2.值对象(Value Object):无业务生命周期,用来描述实体. 3.服务(Service):无状态的行为类 ...
- DDD领域模型企业级系统Unity(五)
添加程序集: 写一个接口: public interface IPlayer { void Play(); } 两个实现类: public class NewPlay : IPlayer { publ ...
- DDD领域模型企业级系统(三)
相关代码: public static void ShowArray() { //数据源 int[] arrayas = new int[] { 1, 2, 3, 4 }; //创建查询 var qu ...
- DDD领域模型和充血对象
DDD领域模型 官方说法 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略 ...
- 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户
阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...
- 领域模型中的实体类分为四种类型:VO、DTO、DO、PO
http://kb.cnblogs.com/page/522348/ 由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念: 概念: V ...
- Linux系统运维笔记(四),CentOS 6.4安装 MongoDB
Linux系统运维笔记(四),CentOS 6.4安装 MongoDB 1,下载 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6 ...
- Linux系统运维笔记(四),CentOS 6.4安装Nginx
Linux系统运维笔记(四),CentOS 6.4安装Nginx 1,安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool op ...
随机推荐
- Could not resolve placeholder 'jdbc.driver'
将jdbc.driver=oracle.jdbc.OracleDriver 改成jdbc.driver=oracle.jdbc.driver.OracleDriver 或者反过来修改. ...
- 利用powerful number求积性函数前缀和
好久没更博客了,先水一篇再说.其实这个做法应该算是杜教筛的一个拓展. powerful number的定义是每个质因子次数都 $\geq 2$ 的数.首先,$\leq n$ 的powerful num ...
- java绘图合并图像AlphaComposite模式测试
package com.hdwang.test; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.sw ...
- LOJ#2540 随机算法
题意:给定图,随机一个排列,依次加点,如果加点之后不是独立集就不加.求最后得到一个最大独立集的概率. 解:就是求有多少个排列可以加出最大独立集. 显然有一个3n的状压DP,0表示没加,1表示没加上,2 ...
- C#利用Zxing.net生成条形码和二维码并实现打印的功能
开篇:zxing.net是.net平台下编解条形码和二维码的工具. 下载地址:http://pan.baidu.com/s/1kTr3Vuf Step1:使用VS2010新建一个窗体程序项目: ...
- Vue实例的生命周期(钩子函数)
Vue实例的生命钩子总共有10个 先上官方图: 下面时一个vue实例定义钩子函数的例子: var app=new Vue({ el:'#app', beforeCreate:function(){ c ...
- Java基础-标识符与关键字
Java基础-标识符与关键字 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是标识符 标识符就是程序员在编写程序时,给类,变量,方法等起的名字. 二.标识符的命名规则 1& ...
- JavaScript条件和循环以及异常处理
JavaScript条件和循环以及异常处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.布尔类型(Boolean) 布尔类型仅包含真假,与Python不同的是其首字母小写. ...
- python---django中模板布局
对于页面大部分一样,我们可以使用模板布局来简化 可以查看tornado中的模板引擎,基本一致 python---tornado模板引擎 对于相同代码部分,我们可以提取出来,放在布局文件layout.p ...
- UVALive 2218 Triathlon
https://vjudge.net/problem/UVALive-2218 题意: 铁人三项比赛,每项比赛长度未定,已知每个选手每项比赛的平均速度. 设计每项比赛的长度,让其中某个特定选手获胜. ...