第四层:Resources   这一层里面主要是几个资源文件.

资源文件知识小杂烩:

  几乎每一个生产性应用程序都需要使用资源。资源是在逻辑上由应用程序部署的任何非可执行数据。资源可以在应用程序中作为错误信息显示,或者作为用户 界面的一部分显示。资源可以包含多种形式的数据,包括字符串、图像和持久的对象。通过在资源文件中存储数据,无需重新编译整个应用程序即可更改数据。在.net中,有文本文件.resx 文件和 .resources 文件三种资源文件。如果资源将只包含字符串数据,则文本文件是最简单的选择。如果资源将包含对象或字符串与对象的组合,则必须创建 .resx 文件或 .resources 文件。注意,只有 .resources 文件才应能嵌入在公共语言运行库程序集和附属程序集中。ProDinner里用到的就是.resx文件.

  .resx 资源文件格式由 XML 项组成,这些 XML 项指定 XML 标记内的对象和字符串。 .resx 文件的一个优点在于,当用文本编辑器(例如记事本或 Microsoft Word)打开此类文件时,可以对其进行写入、分析和操纵。 查看 .resx 文件时,如果嵌入对象(如图片)的二进制格式是资源清单的一部分,则可以实际看见此二进制信息。 除了此类二进制信息之外,.resx 文件是完全可读和可维护的。 不要使用资源文件来存储密码、安全敏感信息或保密数据。

使用详情可以参看这篇文章 http://www.cnblogs.com/JamesLi2015/archive/2011/12/20/2294156.html

ProDinner里面用到.resx文件主要是便于实现多国语言.但是在.resx的命名上,需要按照这样的规则:

Resource.zh-cn.resx(对应简体中文资源文件)

Resource.en-us.resx(对应美国英语资源文件)

中间的Culture名字很重要。

通常在开发时,只要一个默认的Resource.resx,当开发完成之后,拷贝一个相同的Resource.resx,并改名字成上面的样子,然后手动或自动将其中的所有value都翻译成对应的语言。

第五层:Service

该层在功用上看其名称我们应该大致就能知道它是做什么的,Service---提供服务的,类似我们三层架构中的服务提供层或业务逻辑层.

由于整个项目用到了,Castle的依赖倒转,所以这层在实现业务逻辑时,运用的手法也是比较抽象的,在和具体的业务相关联的时候,并没有使用具体的类型,而是使用泛型T,Expression<Func<T, bool>>来解决耦合问题.

功能类划分

CrudService.cs--实体业务逻辑实现service

FileManagerService.cs---文件上传、图片上传service

MealService.cs---图片设置具体到项目中,为设置每个食物的图片而单独的一个service

UserService.cs---用户信息操作业务实现层

首先,CrudService类,看看类名:

public class  CrudService<T> : ICrudService<T> where T : DelEntity, new()

做了泛型类,不仅类本身做了类型限制,连同其继承的接口类型都做了类型限制。Public class CrudService<T>,使用泛型类的一个好处就是,类中定义的所有操作并不针对一个特定的Model实体,而是根据在调用实例化的时 候传过来的类型而定,换句话说,该类中定义的所有方法适用T类型,所以普通的增删改查都定义在了这个类当中。这和我们很多同学在写业务逻辑的时候,针对一 个Model去写一个业务实现,就如同一个屌丝和一个高富帅的距离。

ICrudService<T> where T,这句话翻译成普通话就是,要求类型T实现ICrudService,CrudService进行了显式约束继承,换句话说,T具备这些接口定义的所有方法。

DelEntity继承实现了Entity一个具体的Model,这个Model只有一ID,说到底也是最公用的东西。

New()该类必须实例化使用,官方正规说辞,必须具备Public构造函数。

再次:FileManagerService类

    public class FileManagerService : IFileManagerService

里面仅三个类:

     public void DeleteImages(string root, string filename)
{
var dirPath = root + MealsPath;
File.Delete(dirPath + filename);
File.Delete(dirPath + "s" + filename);
File.Delete(dirPath + "m" + filename);
}
//这个方法实体,很常用,方法体实现了删除大中小三张图片,做电商应该会经常遇到这样的问题,一张图片上传后,会生产不同规格尺寸的图片, public void MakeImages(string root, string filename, int x, int y, int w, int h)
{
using (var image = Image.FromFile(root + TempPath + filename))
{
var dirPath = root + MealsPath;
var img = Imager.Crop(image, new Rectangle(x, y, w, h));
var resized = Imager.Resize(img, , , true);
var small = Imager.Resize(img, , , true);
var mini = Imager.Resize(img, , , true);
Imager.SaveJpeg(dirPath + filename, resized);
Imager.SaveJpeg(dirPath + "s" + filename, small);
Imager.SaveJpeg(dirPath + "m" + filename, mini);
}
} public string SaveTempJpeg(string root, Stream inputStream, out int w, out int h)
{
var fileName = Guid.NewGuid() + ".jpg";
var filePath = root + TempPath + fileName;
using (var image = Image.FromStream(inputStream))
{
var resized = Imager.Resize(image, , , true);
Imager.SaveJpeg(filePath, resized); w = resized.Width;
h = resized.Height;
return fileName;
}
}

这层代码开始和具体业务逻辑相关联了,并开始涉及到了Omu的使用,包括后面的View层都用使用到了Omu的自定义控件,尤其是其实现的MVC Ajax控件,有兴趣可以试用下,集成了Jquery的无刷新无js代码,正式版应该是需要收费的:http://awesome.codeplex.com/discussions/428678

ASP.NET MVC 开源项目学习之ProDinner (三)的更多相关文章

  1. ASP.NET MVC 开源项目学习之ProDinner (一)

    首先在github上面将ProDinner项目通过 Git Bash 克隆到本地,接下来我们开始分析这个项目吧~ 系统采用.Net 4.5, Asp.net Mvc 5,VS2012,Sql serv ...

  2. ASP.NET MVC 开源项目学习之ProDinner (二)

    下面我们来看第二层:Data   这一层相对来说是对Core层的具体实现了. 从命名可以看出来,这和数据库相关. 1.Db.cs CodeFirst模式的本地数据库类,继承了DbContext. pr ...

  3. ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

    一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...

  4. ASP.Net MVC开发基础学习笔记:一、走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  5. ASP.Net MVC开发基础学习笔记(1):走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  6. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  7. angular2+typescript在asp.net MVC Web项目上的实现

    网上现在还没有关于angular2+typescript在asp.net mvc web项目上的实现的系统介绍,这里我也只是探索到了一个简单的方式,还有很多问题没能解决.但是能有个好的开头也值得记录一 ...

  8. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  9. ASP.NET MVC搭建项目后台UI框架—1、后台主框架

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

随机推荐

  1. 导航栏4种效果---原生js

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. titan

    简介 (1)titan:存储,查询图形结构的数据库.分布式集群环境下,可支持数以千亿级别的点和边,同时支持上千个并发的实时的复杂图形遍历,支持ACID事务. (2)架构:支持以下3方面的自由组合 节点 ...

  3. Linux使用笔记: 定制core dump文件的文件名

    在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因.缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要 ...

  4. linux下sublime配置c++11编译环境

    Tools->Build System->New Build System { "cmd": ["g++", "-std=c++11&qu ...

  5. php之面向对象、构造函数、析构函数

    <!DOCTYPE HTML> <html> <head> <title></title> <meta charset="u ...

  6. 斑马打印机网卡ZebraNet配置(有线)

    实图: 抽象图: 说明: 1.并口,用于连接斑马打印机一端 2.网络连接状态指示灯 3.打印状态指示灯 4.测试按钮,在连接打印机的情况下,按下此键,会打印出网卡信息. 5.网线接口 按下测试按钮之后 ...

  7. Hbase原理

    Hbase原理 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop ...

  8. “/wechat”应用程序中的服务器错误。

    对路径“C:\inetpub\wwwroot3\wechat\img\qrcode\”的访问被拒绝. “/wechat”应用程序中的服务器错误. 对路径“C:\inetpub\wwwroot3\wec ...

  9. CentOS修改163源(转载)

    From:http://www.linuxidc.com/Linux/2012-08/69043.htm #CentOS-Base.repo其他版本文件在http://mirrors.163.com/ ...

  10. 运用BigDecimal精确计算

    package com.wzh.test; import java.math.BigDecimal; public class test { /** * @param args */ public s ...