网上书城总结笔记

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/37523821 这次项目的开发,在写需求分析和详细概要设计说明书的时候,是严格按照软件工程规定的软件生命周期开发的原本的用意是根据文档指导开发程序,但是因为自己经验不足,需求分析不到位,设计说明书编写的内容也是不完整的以至于到最后,还是变成了程序指导文档的情况。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/37523821

这次项目的开发,在写需求分析和详细概要设计说明书的时候,是严格按照软件工程规定的软件生命周期开发的

原本的用意是根据文档指导开发程序,但是因为自己经验不足,需求分析不到位,设计说明书编写的内容也是不完整的

以至于到最后,还是变成了程序指导文档的情况。

在绝大部分情况下,不管是说明文档的编写还是程序代码的实现,都是一个团队共同完成的事情

所以在这个时候,一个人势单力薄的形式就很明显了。。。

so~得出结论->写开发文档的时候一定要考虑全面->一个神一样的团队是必不可少的

然后就是开发过程中遇到的问题了

说起来很尴尬

原本是用动软的代码生成器直接生成的三层,实在懒得自己写

然后生成的项目有些命名空间有问题,而且全完没有用的类一大堆

遂通通删掉之

然后看了看清楚了不少的项目

竟然还自己点了点头,表示很满意

之后

开始着手修改项目为抽象工厂模式

然后嫌弃IDAL中每一个数据库的表都要对应一个接口

遂抽象出一个IDalBase<T>的泛型接口

只要一个接口,所有的dal类都继承于它,要添加新的功能时就在添加相应的接口,再让对应的dal类继承并实现

遂删掉生成的IDAL接口

然后又用CodeSmith生成dal层类的代码(中间还有一段自己写生成模板的时间。。。)

刚开始想法是好的,实现了代码重用和抽象,也根据单一职责原则将各个功能都分到不同的接口(除了基本的功能)

然后随着项目的开发,问题就出现了

在IDalBase接口中的基本的方法定义的太草率,很多到开发结束用都没用到

而在中间的时候已经发现了这个问题,遂想修改IDalBase,但是突然发现

只要动了一个,dal中的所有类都要跟着改变

真正的牵一发而动全身啊。。。

而且必须保证表的属性数据类型必须是一样的,如:

根据id查找一条记录

Model.model GetById(int id)

这就要求所有的dal类都要通过int类型的id来查数据库,要是有一个表id数据类型不是int呢?

由于发现的时候项目已经完成一半了,想要重新修改工作量很大。。

只能通过添加功能接口来避免这个问题

这就造成了

IDalBase中的方法很多都没用到

功能接口越来越多(可能有选择恐惧症=。=   太多的接口都不知道怎么命名啊!到最后看起来都是好长好长的名字。。。。)

so~又得出结论->项目的构架刚开始设计的时候一定要想好,不然要么更改(更改工作量很大),要么继续错下去(导致项目结构很糟糕)

在项目开发之始,原本的设想是给管理员设计一个配置页面

在这个页面中可以把整个网站一站静态化

但是后来在实现的时候发现

由于每个页面都嵌套了母版页

而在母版页中有一个地方是每时每刻需要跟新数据并展示出来的

所以又导致了此功能没办法实现~

so~结论是->经常被访问,而不经常改变的页面才是适合做静态页的

在附上为什么要使用静态页的原因:降低服务器和数据库压力,也有利于SEO优化

还有就是一个url重写的问题

在项目开发快要完成之后,才想要进行url重写

但为时已晚

项目中的每个页面的url都已经固定好了

要在更改的话还是那句话,工作量太大不适合我。。。(你是有多懒。。)

so~总结->还是要用什么技术在项目设计的时候一样要考虑清楚!

还是附上已经准备好的url重写的流程吧:

为啥要进行url重写?

简单来说

1.有利于SEO

2.避免在更改网站结构的时候使得用户收藏夹的连接变成死链接

实现的方法:

这里使用UrlRewriter实现

下载地址:UrlRewriter

将dll文件下载下来之后添加到项目引用

在web.config文件中进行配置

1.configSections必须放在configuration节点下的第一项,否则会报错

  <configSections>
    <section name="rewriter"
             requirePermission="false"
             type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
  </configSections>
2.接下来将下面的代码添加到配置文件,rewriter节点中,最后一个是根据正则表达式来匹配重写的(推荐)

其他都是写死的,要写很多

<system.web>
    <httpModules>
      <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
    </httpModules>

    <httpRuntime executionTimeout="3600" maxRequestLength="1048576" requestPathInvalidCharacters="" requestValidationMode="2.0"/>
    <compilation debug="true" targetFramework="4.0"/>
    <customErrors mode="Off"/>
  </system.web>

  <rewriter>
    <rewrite url="~/Index" to="~/Index.aspx" />
    <rewrite url="~/BookDetail/(.+)" to="~/BookDetail.aspx?id=$1" />
    <rewrite url="~/BooksView/(.+)" to="~/BooksView.aspx?categoryId=$1" />
    <rewrite url="~/DiscountBooks" to="~/DiscountBooks.aspx" />
    <rewrite url="~/GoodBooks" to="~/GoodBooks.aspx" />
    <rewrite url="~/News" to="~/News.aspx" />
    <rewrite url="~/Register" to="~/Register.aspx" />
    <rewrite url="~/RSS" to="~/RSS.aspx" />
    <rewrite url="~/SearchBooks" to="~/SearchBooks.aspx" />
    <rewrite url="~/products/(.+)" to="~/products.aspx?category=$1" />
  </rewriter>
完成了这些配置之后url重写就管用了

例如:用户请求Index,重写之后会请求Index.aspx

最后是项目中用到的一些流程和技术

1.找回密码可以使用的流程:
用户填写用户名和邮箱,点击找回密码
发送重置的密码到用户邮箱
用户可以通过重置的密码登陆并修改密码


2.将网站的配置信息设计一个配置页面提供管理员使用

原来的配置信息是存放在web.config文件中的

好处:不需要改源代码重新编译,直接修改配置文件的xml,保存就可以了
坏处:如果网站已经投入使用,修改配置文件会造成网站重启,会丢失正在操作的用户的状态等信息

最好的方法:在网站的后台管理中,专门写一个配置信息的页面,在这里提供了友好的界面以修改相关的配置信息(配置信息在数据库中存取而不放在配置文件中了)
这时会出现一个问题,当用户的数量很大的时候,如果每个用户请求都要读取数据库中的配置信息,服务器压力很大,这时候可以使用缓存,用户请求配置信息时直接从缓存中拿出,当管理员修改数据库中的配置信息时缓存失效(移除相关的HttpRuntime.Cache)


3.权限控制方式

详情请看

asp.net权限控制的方式

4.网上购买支付功能

asp.net购物车,订单以及模拟支付宝支付(一)---购物车表及添加购物车流程

asp.net购物车,订单以及模拟支付宝支付(二)---订单表

asp.net购物车,订单以及模拟支付宝支付(三)---提交订单

asp.net购物车,订单以及模拟支付宝支付(四)---模拟支付宝支付

5.CKeditor+SWFUpload

CKEditor+SWFUpload实现功能较为强大的编辑器(一)---CKEditor配置

CKEditor+SWFUpload实现功能较为强大的编辑器(二)---SWFUpload配置

CKEditor+SWFUpload实现功能较为强大的编辑器(三)---后台接收图片流程

6.限制用户登录错误次数

7.显示评论的时候为几天前的格式

8.用三层实现多条件检索

9.RSS订阅功能

10.敏感词过滤

最后就是项目开发的时候需要注意的一些小问题:

1.接收Get请求的参数的时候一定要先判断一下是否为我们需要的值,因为用户可以随意修改url中的参数
2.sql语句如select 不要直接写* 写具体需要的字段  
3.考虑很多细枝末节
4.模板页中已经引用的文件在子页面中不需要在引用了,否则可能会报错
5.考虑每个页面是否能静态化和进行url重写
6.使用ajax进行异步请求的时候,要注意对页面的改变
7.客户端服务端双向校验
8.页面静态化和整页缓冲的场景使用
9.记录用户名和id的静态类要放在ui中,因为各个表现层(如:asp.net,手机ui层等)用来储存这些信息的方式都不一样,如Session,Cookie等

10.ui向bll传参数的时候不要使用TreeNode等这些只能在winform中用的有限制的参数,只能传int,string,model这些通用的数据类型

相关文章
|
4月前
|
前端开发 安全 Java
【JavaWeb】实训的长篇笔记(下)
八、功能实现 1、注册功能 jsp:能够在页面中把数据动态化,jsp和html在元素标签上是无区别的,区别是html中写上java代码就成了jsp文件。filename.jsp。
30 1
|
3月前
|
前端开发
唯美心情语录随笔个人博客模板源码
心情日记_心情语录随笔-个人博客模板,采用html5+css3设计,模板基于dedecms程序搭建测试。
45 0
|
8月前
|
前端开发 Java 关系型数据库
estore网上书城项目分享
estore网上书城项目分享
61 0
|
4月前
|
SQL 前端开发 关系型数据库
【JavaWeb】实训的长篇笔记(上)(1)
零、Hello 1、心得 不要经常打补丁式地去填充一些细节,而更应该去寻找更好的结构。 2、问题 for语法? workbench创建外键的用法?
40 0
|
4月前
|
SQL 前端开发 Java
【JavaWeb】实训的长篇笔记(上)(2)
4、数据库设计 回头再改表结构是非常麻烦的。 三大范式:1NF(列的原子性),2NF(直接依赖,即所有其他属性都直接依赖于主键),3NF(每个字段不能传递依赖于主键,如有aid列,就不要address列了)。
47 0
|
9月前
|
JavaScript 前端开发 Java
【程序员小白入门】这几个宝藏菜鸟教程网站记得收藏!!!
其实菜鸟教程相关的网站内容都大同小异,推荐这几个原因是页面交互比较简单,重要的是没有任何广告。
|
Java 关系型数据库 MySQL
圣诞节熬夜整理一套SSM模板,让你可以快速搭建环境(一)
SSM框架搭建 一、环境搭建 1、数据库 2、基本环境搭建
圣诞节熬夜整理一套SSM模板,让你可以快速搭建环境(一)
|
前端开发 Java 应用服务中间件
圣诞节熬夜整理一套SSM模板,让你可以快速搭建环境(四)
四、SpringMVC 1.添加web支持 2.web.xml 3.spring-mvc.xml 4. Spring整合配置文件 5.xml中文件声明 五、配置tomcat
圣诞节熬夜整理一套SSM模板,让你可以快速搭建环境(四)
|
druid Java 数据库连接
圣诞节熬夜整理一套SSM模板,让你可以快速搭建环境(三)
三、Spring层 1.spring-dao.xml 2.spring-service.xml 3.解决配置文件不在一块的情况 4.业务类注入到Spring
圣诞节熬夜整理一套SSM模板,让你可以快速搭建环境(三)
|
Java 数据库连接 数据库
圣诞节熬夜整理一套SSM模板,让你可以快速搭建环境(二)
二、Mybatis层 1、连接数据库 2、创建实体类 3、接口 4、业务层

热门文章

最新文章