一起谈.NET技术,走向ASP.NET架构设计——第三章:分层设计,初涉架构(后篇)

简介:   接上篇  4.数据访问层设计   数据访问层,这块要说的不多。但是要澄清一点:数据访问不一定就是访问数据库,虽然多数的情况下,我们确实把数据存储在数据库中。  这里我们用数据库存储数据,并且用Linq To Sql来进行数据访问操作。

  接上篇

  4.数据访问层设计 

  数据访问层,这块要说的不多。但是要澄清一点:数据访问不一定就是访问数据库,虽然多数的情况下,我们确实把数据存储在数据库中。

  这里我们用数据库存储数据,并且用Linq To Sql来进行数据访问操作。

  下面我们就来实现数据操作的一些代码: 

 
  
public class ProductRepository : IProductRepository
{
public IList < Model.Product > FindAll()
{
var products
= from p in new ShopDataContext().Products
select
new Model.Product
{
Id
= p.ProductId,
Name
= p.ProductName,
Price
= new Model.Price(p.RRP, p.SellingPrice)
};

return products.ToList();
}
}

  5. 显示层设计

  我们这里用Model-View-Presenter模式把显示逻辑从UI层中分离出来,成为显示层。其实这样做的好处:方便单元测试,同时也让我们可以换不同的View来显示,例如我们可以换成aspx的页面显示,也可以用WinForm来显示。关于MVP的详细知识,我会在后续的文章中后慢慢的讲述,本篇只是”初涉架构”----相当于把后续文章的知识都提了一下。

  通过看代码来讲述。我们在ASPPatterns.Chap3.Layered.Presentation项目加入一个接口类:IProductListView

 
   
public interface IProductListView
{
void Display(IList < ProductViewModel > Products);
Model.CustomerType CustomerType {
get ; }
string ErrorMessage { set ; }
}

  这个接口会被ASPX的Web Form来实现。下面我们就来创建一个ProductListPresenter来连接View和Service。Presenter负责把数据从service拿来,然后交给View去显示。代码如下: 

 
  
public class ProductListPresenter
{
private IProductListView _productListView;
private Service.ProductService _productService;

public ProductListPresenter(IProductListView ProductListView, Service.ProductService ProductService)
{
_productService
= ProductService;
_productListView
= ProductListView;
}

public void Display()
{
ProductListRequest productListRequest
= new ProductListRequest();
productListRequest.CustomerType
= _productListView.CustomerType;

ProductListResponse productResponse
= _productService.GetAllProductsFor(productListRequest);

if (productResponse.Success)
{
_productListView.Display(productResponse.Products);
}
else
{
_productListView.ErrorMessage
= productResponse.Message;
}

}
}

  这样实现之后,我们现在就可以编写一些测试的代码来测试数据取的是否正确,此时我们不一定非得用页面的显示才知道数据的正确性。而且这样实现的好处之前也提过:我们可以把数据给WPF的界面显示,或者给WinForm的界面显示。 

  6.UI层设计

  最后不管怎么样,我们还是需要显示一下数据的。界面如下:

  ASPX页面的代码如下: 

 
  
public partial class _Default : System.Web.UI.Page, IProductListView
{
private ProductListPresenter _presenter;

protected void Page_Init( object sender, EventArgs e)
{
_presenter
= new ProductListPresenter( this , ObjectFactory.GetInstance < Service.ProductService > ());
this .ddlCustomerType.SelectedIndexChanged += delegate { _presenter.Display();};
}


protected void Page_Load( object sender, EventArgs e)
{
if (Page.IsPostBack != true )
_presenter.Display();
}

public void Display(IList < ProductViewModel > Products)
{
rptProducts.DataSource
= Products;
rptProducts.DataBind();
}

public CustomerType CustomerType
{
get { return (CustomerType)Enum.ToObject( typeof (CustomerType), int .Parse( this .ddlCustomerType.SelectedValue) ); }
}


public string ErrorMessage
{
set { lblErrorMessage.Text = String.Format( " <p><strong>Error</strong><br/>{0}<p/> " , value); }
}

}

  希望大家看到上面一堆代码不要晕,下面就通过一个图来讲述一下整个流程:  

  Page在页面的初始化的时候创建一个ProductListPresenter的实例,并且我们通过StructureMap的ObjectFactory.GetInstance方法得到了一个门户的ProductService。Default页面把任何对他的事件的调用委托给了Presenter,也就是说,我们基本上不在Default的页面代码后面做什么逻辑处理,这一切都放在Presenter里面。 

  最后我们设计的结构就很利于测试和维护,也有很强的扩展性。 

  本篇(前。中,后篇)就到这里了,还是那句话:把三篇连在一起看,多琢磨下代码,有什么问题大家可以留言!多谢支持! :)

目录
相关文章
|
2月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
167 6
|
2月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
64 1
|
11天前
|
存储 消息中间件 小程序
转转平台IM系统架构设计与实践(一):整体架构设计
本文描述了转转IM为整个平台提供的支撑能力,给出了系统的整体架构设计,分析了系统架构的特性。
53 10
|
22天前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
22天前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
2月前
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
107 7
|
2月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
46 5
|
2月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
51 4
|
2月前
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
42 4
|
2月前
|
机器学习/深度学习 人工智能 物联网
.NET 技术:引领未来开发潮流
.NET 技术以其跨平台兼容性、高效的开发体验、强大的性能表现和安全可靠的架构,成为引领未来开发潮流的重要力量。本文深入探讨了 .NET 的核心优势与特点,及其在企业级应用、移动开发、云计算、人工智能等领域的广泛应用,展示了其卓越的应用价值和未来发展前景。
70 5

热门文章

最新文章