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 ...
随机推荐
- DELPHI 字符串与日期格式互转
procedure TForm1.Button1Click(Sender: TObject); var D:TDateTime; s:string; begin D:=VarToDateTime('0 ...
- 字符编码问题mysql
2019-02-27 07:32:17.108 ERROR 21745 --- [nio-8086-exec-2] c.h.h.rest.configurer.WebMvcConfigurer : 接 ...
- 【BZOJ1967】[AHOI2005]穿越磁场(最短路)
[BZOJ1967][AHOI2005]穿越磁场(最短路) 题面 BZOJ 洛谷 题解 一个显然的思路是这样的,我们的正方形的边长把整个平面割成了若干块,显然每个联通块都可以看着做一个点,那么接下来只 ...
- 【转】如何应用Query语句进行规则的语法设置?
在Altium Designer中, 设计规则通常用来定义用户的设计需求. 这些规则涵盖了设计的方方面面, 从布线宽度, 对象的安全间距,内电层的连接风格, 过孔风格等等. 设计规则不仅能在PCB设计 ...
- 洛谷 P2671 求和 解题报告
P2671 求和 题目描述 一条狭长的纸带被均匀划分出了\(n\)个格子,格子编号从\(1\)到\(n\) .每个格子上都染了一种颜色\(color_i\)用\([1,m]\)当中的一个整数表示),并 ...
- 洛谷P4198 楼房重建
题意:给定序列,每次修改一个值,求前缀最大值的个数. 解:线段树经典应用. 每个节点维护最大值和该区间前缀最大值个数. 发现我们不用下传标记,只需要合并区间. 需要实现一个函数int ask([l r ...
- Oracle 11g DRCP配置与使用
Oracle 11g DRCP配置与使用Oracle 11g推出了驻留连接池(Database Resident Connection Pool)特性,提供了数据库层面上的连接池管理机制,为应对高并发 ...
- 各种蕴含算法思想的DP - 1
study from: https://www.cnblogs.com/flashhu/p/9480669.html 1.前缀和 https://www.luogu.org/problemnew/sh ...
- vue父组件调用子组件资源
通过上篇博文提到的方法我们可以触发子组件的某个事件来实现调用子组件的某些资源(例如数据和方法),但是更多的情况下我们会想不通过触发子组件的事件,而直接调用子组件的资源 这个时候我们就需要用到ref了, ...
- Java URL
1.在网络编程的时候,一定不要忘记 <uses-permission android:name="android.permission.INTERNET"></u ...