商餐网

一、 前言

一致的命名模式是托管类库中可预知性与可发现性最重要的元素之一。对这些命名指南广泛的使用和理解将消除许多最常见的用户问题。本主题提供 .NET Framework 类型的命名指南。对于每个类型,还应该注意关于大写样式、区分大小写和措词的一些通用规则。

二、 命名指南

二.1 大写样式

使用下面的三种大写标识符约定。

二.1.1 Pascal 大小写

将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更多字符的标识符使用 Pascal 大小写。例如:

BackColor

二.1.2 Camel 大小写

标识符的首字母小写,而每个后面连接的单词的首字母都大写。例如:

backColor

二.1.3 大写

标识符中的所有字母都大写。仅对于由两个或者更少字母组成的标识符使用该约定。例如:

System.IO

System.Web.UI

可能还必须大写标识符以维持与现有非托管符号方案的兼容性,在该方案中所有大写字母经常用于枚举和常数值。一般情况下,在使用它们的程序集之外这些字符应当是不可见的。

下表汇总了大写规则,并提供了不同类型的标识符的示例。

标识符

大小写

示例

Pascal

AppDomain

枚举类型

Pascal

ErrorLevel

枚举值

Pascal

FatalError

事件

Pascal

ValueChange

异常类

Pascal

WebException

注意   总是以 Exception 后缀结尾。

只读的静态字段

Pascal

RedValue

接口

Pascal

IDisposable

注意   总是以 I 前缀开始。

方法

Pascal

ToString

命名空间

Pascal

System.Drawing

参数

Camel

typeName

属性

Pascal

BackColor

受保护的实例字段

Camel

redValue

注意   很少使用。属性优于使用受保护的实例字段。

公共实例字段

Pascal

RedValue

注意   很少使用。属性优于使用公共实例字段。

二.2 区分大小写

为了避免混淆和保证跨语言交互操作,请遵循有关区分大小写的使用的下列规则:

l 不要使用要求区分大小写的名称。对于区分大小写和不区分大小写的语言,组件都必须完全可以使用。不区分大小写的语言无法区分同一上下文中仅大小写不同的两个名称。因此,在创建的组件或类中必须避免这种情况。

l 不要创建仅是名称大小写有区别的两个命名空间。例如,不区分大小写的语言无法区分以下两个命名空间声明。

namespace ee.cummings;

namespace Ee.Cummings;

l 不要创建具有仅是大小写有区别的参数名称的函数。下面的示例是不正确的。

void MyFunction(string a, string A)

l 不要创建具有仅是大小写有区别的类型名称的命名空间。在下面的示例中,Point p 和 POINT p 是不适当的类型名称,原因是它们仅在大小写方面有区别。

System.Windows.Forms.Point p

System.Windows.Forms.POINT p

l 不要创建具有仅是大小写有区别的属性名称的类型。在下面的示例中,int Color 和 int COLOR 是不适当的属性名称,原因是它们仅在大小写方面有区别。

int Color {get, set}

int COLOR {get, set}

l 不要创建具有仅是大小写有区别的方法名称的类型。在下面的示例中,calculate 和 Calculate 是不适当的方法名称,原因是它们仅在大小写方面有区别。

void calculate()

void Calculate()

二.3 缩写

为了避免混淆和保证跨语言交互操作,请遵循有关区缩写的使用的下列规则:

l 不要将缩写或缩略形式用作标识符名称的组成部分。例如,使用 GetWindow,而不要使用 GetWin。

l 不要使用计算机领域中未被普遍接受的缩写。

l 在适当的时候,使用众所周知的缩写替换冗长的词组名称。例如,用 UI 作为 User Interface 的缩写,用 OLAP 作为 On-line Analytical Processing 的缩写。

l 在使用缩写时,对于超过两个字符长度的缩写,请使用 Pascal 大小写或 Camel 大小写。例如,使用 HtmlButton 或 htmlButton。但是,应当大写仅有两个字符的缩写,如,System.IO,而不是 System.Io。

l 不要在标识符或参数名称中使用缩写。如果必须使用缩写,对于由多于两个字符所组成的缩写请使用 Camel 大小写,虽然这和单词的标准缩写相冲突。

二.4 措词

避免使用与常用的 .NET Framework 命名空间重复的类名称。例如,不要将以下任何名称用作类名称:System、Collections、Forms 或 UI。有关 .NET Framework 命名空间的列表,请参见类库。

另外,避免使用和以下关键字冲突的标识符。

AddHandler

AddressOf

Alias

And

Ansi

As

Assembly

Auto

Base

Boolean

ByRef

Byte

ByVal

Call

Case

Catch

CBool

CByte

CChar

CDate

CDec

CDbl

Char

CInt

Class

CLng

CObj

Const

CShort

CSng

CStr

CType

Date

Decimal

Declare

Default

Delegate

Dim

Do

Double

Each

Else

ElseIf

End

Enum

Erase

Error

Event

Exit

ExternalSource

False

Finalize

Finally

Float

For

Friend

Function

Get

GetType

Goto

Handles

If

Implements

Imports

In

Inherits

Integer

Interface

Is

Let

Lib

Like

Long

Loop

Me

Mod

Module

MustInherit

MustOverride

MyBase

MyClass

Namespace

New

Next

Not

Nothing

NotInheritable

NotOverridable

Object

On

Option

Optional

Or

Overloads

Overridable

Overrides

ParamArray

Preserve

Private

Property

Protected

Public

RaiseEvent

ReadOnly

ReDim

Region

REM

RemoveHandler

Resume

Return

Select

Set

Shadows

Shared

Short

Single

Static

Step

Stop

String

Structure

Sub

SyncLock

Then

Throw

To

True

Try

TypeOf

Unicode

Until

volatile

When

While

With

WithEvents

WriteOnly

Xor

eval

extends

instanceof

package

var

  

 

二.5 避免类型名称混淆

不同的编程语言使用不同的术语标识基本托管类型。类库设计人员必须避免使用语言特定的术语。请遵循本节中描述的规则以避免类型名称混淆。

使用描述类型的含义的名称,而不是描述类型的名称。如果参数除了其类型之外没有任何语义含义,那么在这种罕见的情况下请使用一般性名称。例如,支持将各种数据类型写入到流中的类可以有以下方法。

void Write(double value);

void Write(float value);

void Write(long value);

void Write(int value);

void Write(short value);

不要创建语言特定的方法名称,如下面的示例所示。

void Write(double doubleValue);

void Write(float floatValue);

void Write(long longValue);

void Write(int intValue);

void Write(short shortValue);

二.6 命名空间命名指南

命名命名空间时的一般性规则是使用公司名称,后跟技术名称和可选的功能与设计,如下所示。

CompanyName.TechnologyName[.Feature][.Design]

例如:

Microsoft.Media

Microsoft.Media.Design

给命名空间名称加上公司名称或者其他知名商标的前缀可以避免两个已经发布的命名空间名称相同的可能性。例如,Microsoft.Office 是由 Microsoft 提供的 Office Automation Classes 的一个适当的前缀。

在第二级分层名称上使用稳定的、公认的技术名称。将组织层次架构用作命名空间层次架构的基础。命名一个命名空间,该命名空间包含为具有 .Design 后缀的基命名空间提供设计时功能的类型。例如,System.Windows.Forms.Design 命名空间包含用于设计基于 System.Windows.Forms 的应用程序的设计器和相关的类。

嵌套的命名空间应当在包含它的命名空间中的类型上有依赖项。例如,System.Web.UI.Design 中的类依赖于 System.Web.UI 中的类。但是,System.Web.UI 中的类不依赖于 System.Web.UI.Design 中的类。

应当对命名空间使用 Pascal 大小写,并用句点分隔逻辑组件,如 Microsoft.Office.PowerPoint 中所示。如果您的商标使用非传统的大小写,请遵循您的商标所定义的大小写,即使它与规定的 Pascal 大小写相背离。例如,命名空间 NeXT.WebObjects 和 ee.cummings 阐释了对于 Pascal 大小写规则的适当背离。

如果在语义上适当,使用复数命名空间名称。例如,使用 System.Collections 而不是 System.Collection。此规则的例外是商标名称和缩写。例如,使用 System.IO 而不是 System.IOs。

不要为命名空间和类使用相同的名称。例如,不要既提供 Debug 命名空间也提供 Debug 类。

最后,请注意命名空间名称不必非得与程序集名称相似。例如,如果命名程序集 MyCompany.MyTechnology.dll,它没有必要非得包含 MyCompany.MyTechnology 命名空间。

二.7 类命名指南

以下规则概述命名类的指南:

l 使用名词或名词短语命名类。

l 使用 Pascal 大小写。

l 少用缩写。

l 不要使用类型前缀,如在类名称上对类使用 C 前缀。例如,使用类名称 FileStream,而不是 CFileStream。

l 不要使用下划线字符 (_)。

l 有时候需要提供以字母 I 开始的类名称,虽然该类不是接口。只要 I 是作为类名称组成部分的整个单词的第一个字母,这便是适当的。例如,类名称 IdentityStore 就是适当的。

l 在适当的地方,使用复合单词命名派生的类。派生类名称的第二个部分应当是基类的名称。例如,ApplicationException 对于从名为 Exception 的类派生的类是适当的名称,原因是 ApplicationException 是一种 Exception。请在应用该规则时进行合理的判断。例如,Button 对于从 Control 派生的类是适当的名称。尽管按钮是一种控件,但是将 Control 作为类名称的一部分将使名称不必要地加长。

下面是正确命名的类的示例。

public class FileStream

public class Button

public class String

二.8 接口命名指南

l 用名词或名词短语,或者描述行为的形容词命名接口。例如,接口名称 IComponent 使用描述性名词。接口名称 ICustomAttributeProvider 使用名词短语。名称 IPersistable 使用形容词。

l 使用 Pascal 大小写。

l 少用缩写。

l 给接口名称加上字母 I 前缀,以指示该类型为接口。

l 在定义类/接口对(其中类是接口的标准实现)时使用相似的名称。两个名称的区别应该只是接口名称上有字母 I 前缀。

l 不要使用下划线字符 (_)。

以下是正确命名的接口的示例。

public interface IServiceProvider

public interface IFormatable

以下代码示例阐释如何定义 IComponent 接口及其标准实现 Component 类。

public interface IComponent

{

   // Implementation code goes here.

}

public class Component: IComponent

{

   // Implementation code goes here.

}

二.9 属性命名指南

应该总是将后缀 Attribute 添加到自定义属性类。以下是正确命名的属性类的示例。

public class ObsoleteAttribute{}

二.10 枚举类型命名指南

枚举 (Enum) 值类型从 Enum 类继承。以下规则概述枚举的命名指南:

l 对于 Enum 类型和值名称使用 Pascal 大小写

l 少用缩写。

l 不要在 Enum 类型名称上使用 Enum 后缀。

l 对大多数 Enum 类型使用单数名称,但是对作为位域的 Enum 类型使用复数名称。

l 总是将 FlagsAttribute 添加到位域 Enum 类型。

二.11 静态字段命名指南

以下规则概述静态字段的命名指南:

l 使用名词、名词短语或者名词的缩写命名静态字段。

l 使用 Pascal 大小写。

l 不要在静态字段名称中使用匈牙利语表示法的前缀。

l 建议尽可能使用静态属性而不是公共静态字段。

二.12 参数命名指南

必须仔细遵守这些参数的命名指南,这非常重要,因为提供上下文相关帮助和类浏览功能的可视化设计工具会在设计器中对用户显示方法参数名称。以下规则概述参数的命名指南:

l 对参数名称使用 Camel 大小写。

l 使用描述性参数名称。参数名称应当具有足够的描述性,以便参数的名称及其类型可用于在大多数情况下确定它的含义。例如,提供上下文相关帮助的可视化设计工具会按开发人员键入的实际内容显示方法参数。在这种情况下,方法参数名称的表述必须清楚明白,开发人员才能提供正确的参数。

l 使用描述参数的含义的名称,而不要使用描述参数的类型的名称。开发工具将提供有关参数的类型的有意义的信息。因此,通过描述意义,可以更好地使用参数的名称。少用基于类型的参数名称,仅在适合使用它们的地方使用它们。

l 不要使用保留的参数。保留的参数是专用参数,如果需要,可以在未来的版本中公开它们。相反,如果在类库的未来版本中需要更多的数据,请为方法添加新的重载。

l 不要给参数名称加匈牙利语类型表示法的前缀。

以下是正确命名的参数的示例。

Type GetType(string typeName)

string Format(string format, object[] args)

二.13 方法命名指南

以下规则概述方法的命名指南:

l 使用动词或动词短语命名方法。

l 使用 Pascal 大小写。

以下是正确命名的方法的实例。

RemoveAll()

GetCharArray()

Invoke()

二.14 属性命名指南

以下规则概述属性的命名指南:

l 使用名词或名词短语命名属性。

l 使用 Pascal 大小写。

l 不要使用匈牙利语表示法。

l 考虑用与属性的基础类型相同的名称创建属性。例如,如果声明名为 Color 的属性,则属性的类型同样应该是 Color。请参见本主题内下文中的示例。

以下代码示例阐释正确的属性命名。

public class SampleClass

{

   public Color BackColor

   {

      // Code for Get and Set accessors goes here.

   }

}

以下代码示例阐释提供其名称与类型相同的属性。

public enum Color

{

   // Insert code for Enum here.

}

public class Control

{

   public Color Color

   {

      get {// Insert code here.}

      set {// Insert code here.}

   }

}

以下代码示例不正确,原因是 Color 属性是 Integer 类型的。

public enum Color {// Insert code for Enum here.}

public class Control

{

   public int Color

   {

      get {// Insert code here.}

      set {// Insert code here.} 

   }

}

在不正确的示例中,不可能引用 Color 枚举的成员。Color.Xxx 将被解释为访问一个成员,该成员首先获取 Color 属性(在 Visual Basic 中为 Integer 类型,在 C# 中为 int 类型)的值,然后再访问该值的某个成员(该成员必须是 System.Int32 的实例成员)。

二.15 事件命名指南

以下规则概述事件的命名指南:

l 使用 Pascal 大小写。

l 不要使用匈牙利语表示法。

l 对事件处理程序名称使用 EventHandler 后缀。

l 指定两个名为 sender 和 e 的参数。sender 参数表示引发事件的对象。sender 参数始终是 object 类型的,即使在可以使用更为特定的类型时也如此。与事件相关联的状态封装在名为 e 的事件类的实例中。对 e 参数类型使用适当而特定的事件类。

l 用 EventArgs 后缀命名事件参数类。

l 考虑用动词命名事件。例如,命名正确的事件名称包括 Clicked、Painting 和 DroppedDown。

l 使用动名词(动词的“ing”形式)创建表示事件前的概念的事件名称,用过去式表示事件后。例如,可以取消的 Close 事件应当具有 Closing 事件和 Closed 事件。不要使用 BeforeXxx/AfterXxx 命名模式。

l 不要在类型的事件声明上使用前缀或者后缀。例如,使用 Close,而不要使用 OnClose。

l 通常情况下,对于可以在派生类中重写的事件,应在类型上提供一个受保护的方法(称为 OnXxx)。此方法只应具有事件参数 e,因为发送方总是类型的实例。

以下示例阐释具有适当名称和参数的事件处理程序。

public delegate void MouseEventHandler(object sender, MouseEventArgs e);

以下示例阐释正确命名的事件参数类。

public class MouseEventArgs : EventArgs

{

   int x;

   int y;

   public MouseEventArgs(int x, int y)

      { this.x = x; this.y = y; }

   public int X { get { return x; } }

   public int Y { get { return y; } }

}

二.16 常量 (const)命名指南

以下规则概述事件的命名指南:

l 所有单词大写,多个单词之间用 "_" 隔开。 如

public const string PAGE_TITLE = "Welcome";

三、 编码规范

三.1 类命名规范

参考 类命名指南

以下类派生的子类使用相应的后缀:

System.Attribute/Attribute

System.EventArgs/EventArgs

System.Exception/Exception

System.Collections.ICollection/Collection

System.Collections.IDictionary/Dictionary

System.Collections.IEnumerable/Collection

System.Collections.Queue/Collection or Queue

System.Collections.Stack/Collection or Stack

System.Collections.Generic.ICollection/Collection

System.Collections.Generic.IDictionary/Dictionary

System.Data.DataSet/DataSet

System.Data.DataTable/Collection or DataTable

System.IO.Stream/Stream

System.Security.IPermission/Permission

System.Security.Policy.IMembershipCondition/Condition

An event-handlerdelegate./EventHandler

三.2 类变量编码规范

原则上,在类内部不使用任何public变量,仅使用private变量。private变量的命名参考参数命名指南。其它参考如下:

l 使用Camel大小写,不要用匈牙利命名法。

l 对于bool类型,不要用b或f开头,应使用is或has等动词开头。

l 仅对于短循环索引使用单字母变量名,如   i   或   j。

l 对于声明为DataSet的变量,以ds开头。声明为DataTable的变量以table开头。

三.3 窗体类命名

用Pascal大小写,用名词或名词短语,或者描述行为的形容词命名窗体类,使用Form结尾,例如LoginForm,ProductDetailForm等窗体类名。

三.4 窗体内控件命名

窗体内控件用Camel大小写,使用该控件变量名称作为开头,后面接用名词或名词短语,或者描述行为的形容词。例如,buttonOK,labelAge,textBoxName,checkBoxIsMember等。具体只须把原控件名称中末尾的数字改为控件名称,象button1改为buttonOK。

由于窗体也是控件的子类,声明为窗体的变量命名也类似,但可能窗体类名中已包含用途,所以可以不加任何后缀,仅以Camel大小写命名其变量。例如LoginForm的实例命名为loginForm。

三.5 窗体内非控件变量命名

参考 类变量编码规范

三.6 文件夹及命名空间分布

l 项目根文件夹下尽量少文件,仅放置启动类,也可以放配置文件。

l 把用途相似或行为并列的类放到同一个文件夹中,文件夹命名参考命名空间的命名指南,文件夹尽量保持与类所在的命名空间一致。

l 资源包括图片、音频等放置到资源目录。

三.7 方法编码规范简述

对于每个类里面的方法,规范较多并且复杂,以下简述一些:

l 方法命名应以动词或动词短语开头,后面可加名词或形容词表示动作的对象或结果。例如ToString(),Show(),Refresh()等。

l 方法的参数用该方法的动词的对象命名。例如Delete(Student student)。

每个方法代码行数不应超过100行。尽量把集中的动作移到另外的方法中,并准确命名。

 

尚餐网项目开发规则及部分协调

尚餐网项目开发规则

为确保项目目标的实现,领导项目团队准时、优质地完成全部工作,做出以下调整:

1.根据策划了解项目的整体需求及功能,做程序架构设计,数据库设计。

1.根据页面设计及程序架构做功能开发。

3.制定项目开发计划文档,量化任务,并合理分配给相应的人员。

4.跟踪项目的进度,协调项目组成员之间的合作。

5.监督产生项目进展各阶段的文档,并与QA即时沟通,保证文档的完整和规范。

6.程序开发过程中的功能需求变更, 需与项目策划和设计沟通,在无法判断新的需求对项目的整理影响程度的情况下,需同项目组成员商量,最后决定是否接收变更的需

求。定要变更需求的情况下,需产生需求变更文档,更改开发计划(前端策划和设计书面文档),通知项目开发部。

7.项目提交测试后,项目经理需了解测试结果,根据测试的bug的严重程度来重新更改开发计划。

8.向上汇报。向上级汇报项目的进展情况,需求变更等所有项目信息。

9.项目完成的时候需要项目总结,产生项目总结文档。

尚餐网是一个提供餐厅完整菜谱并能实现在线点餐的网络订餐服务平台。 独特创新融合了成都上万家优质餐厅,为您提供优惠聚餐、商务宴请等众多服务,可以通过网站和手机客户端方便的完成从查找餐 厅、确定菜品、在线下单、准时就餐,直到点评分享、推荐、讨论等全过程,让你随心所欲淘美味,轻松一击即刻享!

具体开发细节如下:

1.功能开发

1.1.商家功能

1.2.评论功能

1.3.账号验证功能

1.4.订单功能

1.5.公用功能

1.6.账户功能

2.数据库开发

2.1.商家功能

2.2.个人功能

2.3.权限功能

2.4.视图

2.5.存储过程

我们是一个创业团队记录开发中的点点滴滴,也希望有更的人参与加入我们。

引言:尚餐网是一个提供餐厅完整菜谱并能实现在线点餐的网络订餐服务平台。 独特创新融合了成都上万家优质餐厅,为您提供优惠聚餐、商务宴请等众多服务,可以通过网站和手机客户端方便的完成从查找餐 厅、确定菜品、在线下单、准时就餐,直到点评分享、推荐、讨论等全过程,让你随心所欲淘美味,轻松一击即刻享!

上一篇:点餐网站学习(EF+MVC)开发概况

1.去微软官方网站下载:ADO.NET Entity Framework 4.1

2.在VS2012中通过NuGet将 ‘EntityFramework’ NuGet package 添加到你的项目中

3.安装Entity Framework Power Tools Beta 3特别说一下这个小工具的功能:

1) 按照现有数据库结构,生成Code First POCO class、DbContext class和相应的mapping class。

2) 以designer模式或XML模式查看POCO class对应的Entity Data Model (edmx) 。

3) 查看Entity Data Model所对应的DDL。

4) 生成EF Generated View提高EF性能。

注:LINQ在EF中使用会提高工作效率。这里有几个学习LINQ的文章大家可以看看交流一下。

1.Linq学习笔记

2.LINQ与SQL中的不同

引言:尚餐网现目前的站内结构还是有一定的缺陷,这是因为开始开发的时候一味的去要求时间,没有过多的去考虑SEO内容结构导致Alexa排名上不去。

同行的站内结构比我们的站内结构好的哪肯定会轻松的把尚餐网排名挤在后面,现在太后悔了,这样太不值得了,所以做SEO优化站内结构是非常重要的。这也是为什么特别拿一篇来说说,希望更多的人不要和我犯一样的错。

一.MVC文件布局及文件安排

 

目录

用途

Controllers

放置控制器类

Models

放置数据描述、操纵类和业务对象类

Views

放置视图

Scripts

放置JavaScript脚本

Images

放置图像

Content

放置css和除了JavaScript脚本,图像以外的东西

Filters

放置过滤器代码

App_Data

放置数据存数文件

App_Start

放置配置文件代码

MVC开发请注意几点

1.约定胜于配置

  意味着我们可以根据经验(约定)编写应用程序而不需要进行配置。增加可读性,操作性。

控制器都以Controller为后缀并且保存在Controllers目录。

Views目录存放应用程序的视图。

视图的路径为Views/控制器名称/,但有一个共享目录/Views/Shared/可以自由存放视图。

2.约定可以简化沟通

  你不需配置计算机就会知道如何来执行

  你的程序容易被其他人员浏览、阅读和调试、维护。

二.SEO站内结构优化

1. 首页文件名

  1.1. 默认文档是否站点首页

  1.2. 是否存在跳转

  1.3. 首页锚文本链接地址是否唯一

2. 目标关键词

  2.1. 目标关键词及数量

  2.2. 目标关键词准确性

  2.3. 目标关键词竞争度分析

  2.4. 目标关键词建议

3. 长尾关键词

  3.1. 长尾关键词

  3.2. 长尾关键词获取方式

  3.3. 长尾关键词相关度

  3.4. 长尾关键词记录单

4. 网站结构

  4.1. 是否树形结构

  4.2. 页面间链接情况

  4.3. 栏目间链接情况

  4.4. 页面JS文件使用情况

  4.5. 页面多媒体使用情况

  4.6. 图片ALT属性检查

  4.7. 内容和样式是否分离

5. 网站导航

  5.1. 是否锚文本导航

  5.2. 导航锚文本关键词相关性

  5.3. 主导航和次导航

  5.4. 是否有面包屑导航

6. 栏目页

  6.1. 三个标记;titlekeywordsdescription

  6.2. 标题结构

  6.3. 关键词相关性

  6.4. 分页标题重复度检测

  6.5. 分页链接URL是否加深了URL深度

7. 内容页

  7.1. 内容来源

  7.2. 三个标签;Title、Keywords、Description

  7.3. 四处一词;标题,关键词,描述,外链锚文本

  7.4. URL深度

  7.5. URL是否包含关键词(英文)

  7.6. 标题格式

  7.7. H标记的使用

  7.8. 文章写作是否符合SEO规范

  7.9. 图片ALT属性

  7.10. 站内关键词锚文本

  7.11. 五条金律

  7.12. 文章总量

  7.13. 文章收录量

  7.14. 页面关键词密度

  7.15. 相关内容推荐

  7.16. 是否对缩进等无用代码进行清理

8. 页面更新机制

  8.1. 是否存在页面更新机制

  8.2. 页面更新方式

  8.3. 页面更新频率

9. Robots.txt蜘蛛协议

  9.1. 文件是否存在

  9.2. 正确性检查

  9.3. 蜘蛛权限检查

  9.4. 是否泄露后台地址

10. 404错误页面

  10.1. 404页面正确性

  10.2. 404页面内容策划

  10.3. 是否存在302跳转

  10.4. 是否在Robots.txt文件中进行屏蔽

11. sitemap网站地图

  11.1. 是否有网站地图

  11.2. 网站地图格式是否正确

  11.3. 网站地图文件类型

  11.4. 是否在robots.txt文件中指明地图位置

12. URL标准化

  12.1. 主域名标准化

  12.2. 页面URL标准化

  12.3. URL搜索引擎友好化

  12.4. URL是否唯一化

13. 友情链接

  13.1. 友情链接数量

  13.1.1. 页面总数

  13.1.2. 域名总数

  13.2. 友情链接质量

  13.3. 友情链接站点类型多样化

  13.4. 是否存在链轮结构

  13.5. 是否购买链接

  13.6. 是否使用黑链

14. 站内站建设

  14.1. 是否存在站内站

  14.2. 站内站建设现状

  14.3. 站内站定位

  14.4. 一级目录或二级域名

  14.5. 其他(同主站分析)

15. 权重传递控制

  15.1. 是否对非重要内容进行权重传递屏蔽

  15.2. 是否对第三方服务URL进行权重传递屏蔽

  15.3. 是否对第三方广告进行权重传递屏蔽

  15.4. 是否对第三方提交内容中的URL进行权重传递屏蔽

  15.5. 其他屏蔽

16. 其他因素

  16.1. 网站安全性

  16.2. 广告数量和展示方式

  16.3. 是否安装统计分析代码

  16.4. 是否有联系方式

  16.5. 是否提供RSS订阅

  16.6. 设为首页和收藏等

  16.7. 公信力项目展示

  16.8. 是否符合政策法规

各位都是大虾,帮个忙小弟正在做EF+MVC的项目开发,有很多地主都还不懂,在设计上和开发中一定会遇到很多问题,请各位多提点意见:
尚餐网为了更好地提供服务,我们真诚地希望您对本站发布的文字、图片等内容进行纠错。如发现事实性或技术性差错、信息内容更新滞后等问题,敬请不吝指正。收到您反馈的信息后,我们将认真核实,及时纠错。
尚餐网会不定时更新设计图,也欢迎您提出宝贵建议,非常感谢你!

1.首页

2.商家首页

3.文字菜谱

4.图片菜谱

5.搜索列表

引言:在创业公司,很多情况下需求都不是很明白,因为在初衷都只是想法,没有一个具体的东西。为了成本考虑我们如果同步开发昵!我们得想一想是不是只有设计图完全出来后我们才能做相关的开发昵!结果不然,我们只需要知道大概要做什么功能,如何去分析功能昵,我的想法是OOP思想,针对对象去分析,以对象为单位来做功能也就是说我们的每一个功能(增,删,查,改)都以对象去做,我是以尚餐网之前的功能分析去参考如下:

1.分析数据结构创建数据库

  

创建权限中的角色表

CREATE TABLE [dbo].[tbl_Role](
[RoleID] [int] IDENTITY(1,1) NOT NULL,
[RoleName] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_tbl_Role] PRIMARY KEY CLUSTERED
(
[RoleID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'成员角色编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Role', @level2type=N'COLUMN',@level2name=N'RoleID'
GO
/****** Object:  Table [dbo].[tbl_Membership]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建权限中的成员
CREATE TABLE [dbo].[tbl_Membership](
[MembershipID] [int] IDENTITY(1,1) NOT NULL,
[MembershipAccount] [nvarchar](50) NOT NULL,
[MemberShipPassword] [nvarchar](50) NOT NULL,
[MemberShipState] [int] NOT NULL,
[MemberShipCreate] [datetime] NOT NULL,
CONSTRAINT [PK_tbl_Membership] PRIMARY KEY CLUSTERED
(
[MembershipID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'成员编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Membership', @level2type=N'COLUMN',@level2name=N'MembershipID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'成员账号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Membership', @level2type=N'COLUMN',@level2name=N'MembershipAccount'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'成员密码' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Membership', @level2type=N'COLUMN',@level2name=N'MemberShipPassword'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'成员状态' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Membership', @level2type=N'COLUMN',@level2name=N'MemberShipState'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Membership', @level2type=N'COLUMN',@level2name=N'MemberShipCreate'
GO
/****** Object:  Table [dbo].[tbl_ShopInfo]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建商家信息
CREATE TABLE [dbo].[tbl_ShopInfo](
[ShopInfoID] [int] IDENTITY(1,1) NOT NULL,
[MembershipID] [int] NOT NULL,
[ShopInfoName] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_tbl_ShopInfo] PRIMARY KEY CLUSTERED
(
[ShopInfoID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'商家信息编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_ShopInfo', @level2type=N'COLUMN',@level2name=N'ShopInfoID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'成员编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_ShopInfo', @level2type=N'COLUMN',@level2name=N'MembershipID'
GO
/****** Object:  Table [dbo].[tbl_UserInfo]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建用户信息
CREATE TABLE [dbo].[tbl_UserInfo](
[UserInfoID] [int] IDENTITY(1,1) NOT NULL,
[MembershipID] [int] NOT NULL,
[UserInfoName] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_tbl_UserInfo] PRIMARY KEY CLUSTERED
(
[UserInfoID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户信息编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_UserInfo', @level2type=N'COLUMN',@level2name=N'UserInfoID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'成员编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_UserInfo', @level2type=N'COLUMN',@level2name=N'MembershipID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户信息名字' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_UserInfo', @level2type=N'COLUMN',@level2name=N'UserInfoName'
GO
/****** Object:  Table [dbo].[tbl_MembershipInRole]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建权限中的成员与角色
CREATE TABLE [dbo].[tbl_MembershipInRole](
[RoleID] [int] NOT NULL,
[MembershipID] [int] NOT NULL
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'成员编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_MembershipInRole', @level2type=N'COLUMN',@level2name=N'RoleID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'成员编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_MembershipInRole', @level2type=N'COLUMN',@level2name=N'MembershipID'
GO
/****** Object:  Table [dbo].[tbl_Validation]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tbl_Validation](
[ValidationID] [int] IDENTITY(1,1) NOT NULL,
[ValidationName] [nvarchar](50) NOT NULL,
[ValidationType] [int] NOT NULL,
[ShopInfoID] [int] NULL,
[UserInfoID] [int] NULL
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'验证编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Validation', @level2type=N'COLUMN',@level2name=N'ValidationID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'验证名字' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Validation', @level2type=N'COLUMN',@level2name=N'ValidationName'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'验证类型' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Validation', @level2type=N'COLUMN',@level2name=N'ValidationType'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'商家编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Validation', @level2type=N'COLUMN',@level2name=N'ShopInfoID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Validation', @level2type=N'COLUMN',@level2name=N'UserInfoID'
GO
/****** Object:  Table [dbo].[tbl_ShopSet]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建商家设置
CREATE TABLE [dbo].[tbl_ShopSet](
[ShopSetID] [int] IDENTITY(1,1) NOT NULL,
[ShopInfoID] [int] NOT NULL,
[ShopSetName] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_tbl_ShopSet] PRIMARY KEY CLUSTERED
(
[ShopSetID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'商家设置编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_ShopSet', @level2type=N'COLUMN',@level2name=N'ShopSetID'
GO
/****** Object:  Table [dbo].[tbl_ShopPhoto]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建商家相册
CREATE TABLE [dbo].[tbl_ShopPhoto](
[ShopPhotoID] [int] IDENTITY(1,1) NOT NULL,
[ShopInfoID] [int] NOT NULL,
[ShopPhotoName] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_tbl_ShopPhoto] PRIMARY KEY CLUSTERED
(
[ShopPhotoID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'商家相册编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_ShopPhoto', @level2type=N'COLUMN',@level2name=N'ShopPhotoID'
GO
/****** Object:  Table [dbo].[tbl_Comment]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建权限中的评论
CREATE TABLE [dbo].[tbl_Comment](
[CommentID] [int] IDENTITY(1,1) NOT NULL,
[CommentTitle] [nvarchar](100) NOT NULL,
[ShopInfoID] [int] NOT NULL,
[UserInfoID] [int] NULL,
CONSTRAINT [PK_tbl_Comment] PRIMARY KEY CLUSTERED
(
[CommentID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'评论' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Comment', @level2type=N'COLUMN',@level2name=N'CommentID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'评论标题' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Comment', @level2type=N'COLUMN',@level2name=N'CommentTitle'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'商家编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Comment', @level2type=N'COLUMN',@level2name=N'ShopInfoID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_Comment', @level2type=N'COLUMN',@level2name=N'UserInfoID'
GO
/****** Object:  Table [dbo].[tbl_Order]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建权限中的订单
CREATE TABLE [dbo].[tbl_Order](
[OrderID] [int] NOT NULL,
[OrderNo] [nvarchar](100) NOT NULL,
[ShopInfoID] [int] NOT NULL,
[UserInfoID] [int] NULL,
[OrderPeople] [nvarchar](50) NULL,
[OrderTelephone] [nvarchar](30) NULL,
CONSTRAINT [PK_tbl_Order] PRIMARY KEY CLUSTERED
(
[OrderID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[tbl_ShopDishType]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建权限中的菜品分类
CREATE TABLE [dbo].[tbl_ShopDishType](
[ShopDishTypeID] [int] IDENTITY(1,1) NOT NULL,
[ShopInfoID] [int] NOT NULL,
[ShopDishTypeName] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_tbl_ShopDishType] PRIMARY KEY CLUSTERED
(
[ShopDishTypeID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'商家菜品分类编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_ShopDishType', @level2type=N'COLUMN',@level2name=N'ShopDishTypeID'
GO
/****** Object:  Table [dbo].[tbl_ShopDishInfo]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建权限中的菜品
CREATE TABLE [dbo].[tbl_ShopDishInfo](
[ShopDishInfoID] [int] IDENTITY(1,1) NOT NULL,
[ShopDishTypeID] [int] NOT NULL,
[ShopDishInfoName] [nvarchar](100) NULL,
CONSTRAINT [PK_tbl_ShopDishInfo] PRIMARY KEY CLUSTERED
(
[ShopDishInfoID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'商家菜品信息编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_ShopDishInfo', @level2type=N'COLUMN',@level2name=N'ShopDishInfoID'
GO
/****** Object:  Table [dbo].[tbl_OrderDetails]    Script Date: 02/22/2013 09:31:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

创建订单详情
CREATE TABLE [dbo].[tbl_OrderDetails](
[OrderDetailsID] [int] IDENTITY(1,1) NOT NULL,
[OrderID] [int] NOT NULL,
[ShopDishInfoID] [int] NOT NULL,
CONSTRAINT [PK_tbl_OrderDetails] PRIMARY KEY CLUSTERED
(
[OrderDetailsID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'订单详情' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_OrderDetails', @level2type=N'COLUMN',@level2name=N'OrderDetailsID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'商家具体菜编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_OrderDetails', @level2type=N'COLUMN',@level2name=N'ShopDishInfoID'
GO

大家可以看到,我只是把数据结构及关系做了!有人一定会问哪以后数据表中的字段一变,程序的模型不是也要变吗?哪不是很麻烦嘛!

二.EF Power Tool创建模型直接映射数据库

  之前的文章我已经介绍过EF Power Too哪我在说说吧!

  安装Entity Framework Power Tools Beta 3特别说一下这个小工具的功能:

  1) 按照现有数据库结构,生成Code First POCO class、DbContext class和相应的mapping class。

  2) 以designer模式或XML模式查看POCO class对应的Entity Data Model (edmx) 。

  3) 查看Entity Data Model所对应的DDL。

  4) 生成EF Generated View提高EF性能。

  具体步骤如下:

  1) 创建项目

  

  2)使用EF Power Tool

  

  3)EF工具关联数据库,形成映射关系

  

  4)结果

  

 

猜你喜欢

转载自blog.csdn.net/vera514514/article/details/8616222