标签:
项目中引用的组件
1.System.Data.SQLite.dll 自行编译 SQLite-1.0.66.0-source 3.5的框架;F:\Code\开源项目\SQLite\1.0.66.0_x86\源码\SQLite-1.0.66.0-source\bin【目前已经更新了,不在使用这个了,这个有个bug】
2.F:\Code\开源组件\LitJSON\0.9.0
3.NVelocity.dll 来自小泥鳅blog
******************************************************************************************************************
一些想法
1.将一个大对象拆开有好处,免得在获取数据的时候, 查询过多的数据【比如Product对象】
2.定义一个SQL函数的管理器,管理程序中的SQL语句, select部分,from部分,where部分,条件部分,分组部分,排序部分 【这个想法来自于PetShop】
3.委托功能实现分页【这个就算了】
4.良好而规范的变量命名,可以降低注释的代码量 同时增加代码的易读性
拆分多个数据库的想法
Octopus.db 产品分类 品牌 门类
OctopusMember.db 网站会员信息,购物车
OctopusOrders.db 订单数据库
OctopusCommon.db 通用配置信息 之类公共广告信息 静态代码 模板管理
******************************************************************************************************************
需求模块
1.看我思维导图
2.参照开源程序 PetShop,zencart,magento,BalloonShop,opencart,nopCommerce,小泥鳅....
3.ShoppingNetwork
4.在线购物网站
兰亭
http://www.footlocker.com/
http://www.sierratradingpost.com/site-map/
5.要进行测试每一个函数
******************************************************************************************************************
2.0版本
重大更新
1.实体中VO对象里面的 业务代码提取出来 放置到 业务BLL层里面去
需要更新
1.加入一个产品关联的属性【已经实现】
2.请不要调用产品的图片信息【没有初始化】
3.升级先有的数据库,存储顾客和订单的信息 【采用json存储 因为本身数据量不是很大】
4.升级数据库 将现在的数据库进行拆分 用于支持更多的数据库【已经拆分】
5.关于注册表单的问题,采用magento的那套表单注册机制和采用兰亭集势的注册机制【没有采用】
原因分析一下:
因为我们的网站大多数的客户是属于一次性交易的客户,因此开放匿名购买的功能非常的有必要性【实现了】
像兰亭这样的大站,他们有固定的用户群体,所以每次下单结算的时候必须要登陆网站才能操作,但是我们的不一样的
6.更新分类的调用:指定几个分类的调用;指定条数的调用【已经实现,还没有使用】
7.分类自定义的样式属性,为分类呈现出特殊的 标识样式 比如加上Hot 【后期扩展使用】
8.更新产品详情 展示的 批量折扣的优惠提示信息【后面实现】
9.前台增加一个访客的历史记录【后面实现】
10.简单的产品评论
11.优惠的三种方案 优惠码优惠方案 满多少金额优惠方案 批量件数的优惠方案
12.产品详情的展示部分 增加产品的关联产品 增加产品的搭配产品
13.增加产品属性 的可输入属性
14.增加价格属性部分 产品属性影响价格的部分
15.购物车部分的实现 采用数据库的方式进行实现
16.会员中心
内置几套固定的模板可供选择
登陆注册部分采用ajax的方式实现
会员中心的一部分采用的是Webservice的方式实现
17.增加语言包的缓存功能【已经实现】
后台管理部分
1.批量修改产品的价格
2.批量增加新的产品
开发采用新的数据Web服务接口
通过一个 简单的开放API的 东西进行控制
运费和汇率的统一调整服务
要求实现:确保所有的网站的汇率能够得到统一的更新
运费实现:和各个国家区域相关联的部分
产品Size
单一的这种
带有属性价格的这种
多个Size的这种
带有颜色图片的这种
******************************************************************************************************************
1.关于多语言汉化的问题
注意几个地方:js中使用的固定字符串; title; 标签中文字; alt;Help链接的名字
建议在最开始的时候 定义一个全局的json对象,用来存储所有的js中的多语言字符很有效果,包括cookie的名字
2.关于当前系统中所有的排序:排序数字越大 越靠前 【默认的关系规则】
分类列表读取时的排序
order by SortOrder asc,CategoryID desc
产品列表读取时的排序
3.增加link信息表 连接管理--主要用于对【帮助,隐私政策连接】的实现
4.
增加产品Color颜色属性,增加产品关联的算法【需求来自于uggouteltonline.us.com】
更新增加团购的功能,买的更多,将会有更多的优惠【需求来自于zencart 为产品设置批量优惠】
更新属性图片--图片地址的存储 ${siteurl}/red.gif; 输出到前台的时候将会自动装换【等待实现】
5.ProductInfo扩展函数的问题
备注:扩展函数可以提取到 公共实体当中去 EntityInfo
这些函数有 比如创建产品URL的地址格式;创建分类产品的URL地址格式,将这个提取到公共的类里面
6.是否应该在VO对象中掺杂业务逻辑
是否应该在业务层中来构造VO对象呢? 不在VO对象掺杂复杂的 业务获取逻辑呢?
******************************************************************************************************************
关于分类
分类是否是虚拟分类
分类下的子分类分类列表
分类的产品列表
分类营销信息
1.并不是所有的字段都是必须的
2.应该将信息进行分类
3.写一个版本的调用说明书
******************************************************************************************************************
即将要做的事情
1.迁移升级数据库
2.后台项目功能的基本需求 简单为主 可以参考小泥鳅的设计思路
3.购物车和会员中心 以及一些小的功能的 东西
4.还有一个东西就是前段的问题
******************************************************************************************************************
基本常识问题
SAVE off 25%意思是指节省25%
就是7.5折的意思
节省百分之二十五
一些常用的操作 前台最好同时使用脚本的方式完成
这些年便于在各个地方调用
******************************************************************************************************************
购物车两种思路
第一种:在本页本做提交
第二种:采集脚本的方式
为网站的表单提交增加一个 安全值
<input type="hidden" name="securityToken" value="94b6f35fd3e84e42c5742a83dab0f235">
通过区分不用的页面,来实现不同页面,js的加载,区分请求的页面类型即可【主要指的是head区域】
和上面的一个问题一样,不同页面的文档加载完毕之后 执行的函数是不一样的 ready函数【是写在页面中去?还是在外置代码中去呢?】
注意任何时候 都不要在form 标记上添加设置样式
NV可以读取:注意不要 在后面加“--” 否则无法识别
扩展开启一个GZIP的压缩模式【已经得到支持了】
HttpCustom类优化:
1.不要过多的查询很多的数据,比如之前想的将购物车的东西加入进去,最好不要这样做
2.后期优化是要加入 对象缓存的功能
3.用户缓存的对象 写入到全局对象中去【还要考虑如何让业务层使用Cache对象】
购物车一定要实现的是:可以支持异步调用
注意这个地方:Cache-Control: private
从Cookie中读取购物车的ID 和 货币一样加入到数据上下文中
可以通过Cookie的过期时间来实现在关闭浏览器之后 可以继续存在购物车中 方式设置
兼容jq的写法
var $a = jQuery.noConflict();
$a(document).ready(function(){
$a(‘#nav li‘).hover(
function(){
$a(this).addClass("hover");
},
function(){
$a(this).removeClass("hover");
}
);
$a(‘#nav ul‘).each(function(){
$a(this).parent().addClass(‘items‘);
});
在订单模块 增加一个用户风险 的字段判断
检查密码的规则:通过规则验证之后,才能注册
限制某个IP 某个时间 某个地方的用户注册
登陆部分
检测请求 是不是 人为操作的 同时防止 机器登陆【注意千军万马】
先进行客户端的 安全检测 然后再进行服务端的检查【用户Email邮件有效性检查】
注意优化IOption
注意优化不要在session中存放 过大的对象
js函数分类:全局页面函数;单个页面的函数
页面中带有明链 的一些连接 比如 shopping car.ashx等等 可以参考qblog 中处理的方法 在系统中定义好
要实现URL中 链接 后缀的自定义
思路:将页面的类进行抽象化的处理
1.分离出抽象了和接口
2.类似aspx 有页面基类和控件基类 实现各自不同的生命周期
3.抽象出公共的代码:比如模板的实例放在公共类里面; 公共的接口;继承之后就会有公共的部分
接下来 拆分数据库
数据库的分离这样来搞:
1 将读写的分开了
2. 公共配置的分开
实现对SQLite的版本数据库的支持
和对URL重写模块的实现
关于优惠码的放置问题
放在购物车的部分?【需要更新数据库的字段问题】
还是放在结算的部分?
URL重写的配置 采用全域名重写的配置
还有一种思路:子模板的实现
widget
//protected int productID = 0;
//根据产品的ID 获得产品对象属性
//接下来的这几个模块
//购物车模块
//登陆注册模块
//匿名购买功能
//会员中心
//产品评论
//通过POST 提交数据
//提交方式
/*
* submit方式提交
* 通过ajax方式提交
*
* 属性值无效
* 属性价格
* 属性展示的样式
* select下拉框
* span样式的单选框 通过隐藏字段获取值
* 文本框 用于用户输入球衣号码 或者一些其他信息
*
* 数量
*
* 产品的批量优惠【自动优惠方案设计】
* 批发提交多个产品到购物车
* 通过隐藏字段action的标记 引发不同的 代码
productID = 12;
switch (action)
{
case "add":
productID = 123;
break;
case "remove":
break;
case "update":
break;
case "view":
break;
default:
break;
}*/
使用标准SQL写法
----------------------------
订单模块:
什么时候生成订单?
如何防止重复订单的生成?
匿名用户的处理
收货地址的处理
订单信息:
订单号 订单金额 订单的收货地址信息 账单地址信息
注意在添加产品图片的时候,一定要将产品的主图和详细图 放在产品的Imglist字段中去
#region 备注
//处理分类URL地址格式
//http://localhost:40966/women-s-boots/
//http://www.hermesglobalshop.com/hermes-birkin-c-1.html
//http://localhost:40966/shop-women/c11.html
//http://www.hermesglobalshop.com/hermes-birkin-c-1.html?page=2&sort=20a
//http://localhost:40966/florent-rio-pink-314011.html
//http://localhost:45956/page/3.html
//http://localhost:45956/category/default/page/3.html
//http://www.hermesglobalshop.com/hermes-birkin-bag-30-alezanchestnut-brown-ostrich-skin-gold-har-p-98.html
//分类
//http://www.hermesglobalshop.com/hermes-birkin-c-1.html
//http://www.hermesglobalshop.com/hermes-birkin-c-1/page-1.html
//http://localhost:45956/category/default/page/3.html
//http://official.usahandbagsonline.com/Satchels-c-2/p3.html
//http://official.usahandbagsonline.com/Satchels-c-2.html
//产品
//处理产品URL的地址格式
//http://localhost:40966/florent-rio-pink-314011.html
//http://www.hermesglobalshop.com/hermes-birkin-bag-30-alezanchestnut-brown-ostrich-skin-gold-har-p-98.html
#endregion
为了简化制作模板的流程
从购物车的这个地方开始 做分离
CSS 要划分开
1.购物车模块
2.登陆注册模块
3.支付模块
4.会员中心模块
要让以上几个地方 实现单独的独立 这样在制作模板的时候 就可以少做一些页面
只需要 首页 分类页 详情页 即可
同时将帮助中心进行 单独的模块化
要求目标
1.兼容各个浏览器
2.规范化的命名
3.页面中不要加入过多的CSS样式代码
载入说明
先载入样式,在引入脚本
改进 一些静态图片的引入算法
var thempath="";
批量替换这些图片
防止更改图片文件夹造成的问题
<img src="images/common/addtocart.jpg" data-theme="img"/>
<script type="text/javascript">
$(document).ready(function () {
var themepath = "themes/fitflops/pc/";
var src = $("img[data-theme=‘img‘]").attr("src");
$("img[data-theme=‘img‘]").attr("src", themepath + src);
});
</script>
//绑定最新最热产品
//绑定静态代码
//绑定广告图片
//应该作为全局对象进行加载
追加一个测试:测试 一个请求 需要访问几次数据库?
追加一个自定一个 文件缓存功能
//为什么我这个地方一修改 就会更新数据库呢? 原因是反序列化 出现异常了
注意追踪 GetCookie 1193 行 public static string GetCookie(string strName)
URL重写的关键
1.看清楚有哪些请求
2.找出需要重写的请求
3.到底使用哪一个函数进行重写
4.在众多的请求中寻找出 我们需要重写的URL路径
两个点子
自定的HTML应该支持多个 模板才能实现的
后台判断登陆的时候,通过islogin 实现【通过前台的脚本实现】
后台增加一个日志的功能:
各自的统计:
比如:
是否开启URL重写日志记录
是否开启SQL的日志分析记录
是否开启网站程序失败的日志记录
增加一个 后台的 “后门程序”-- 重启网站 防止死锁使用
再也不要使用 自增字段了【通过编码控制】
通过日志分析 双top的分页算法 升级分页算法
增加一个注册js的脚本 用来做前台的多语言 静态的输出 类似于兰亭的实现 通过ashx 方式响应到前台
扩展购物车的地方 采用magento的样式
扩展diag对话框 增加多种皮肤的样式 研究它的源代码
还要研究一下其他的弹出层之类的 还是比较有用的
还有一些 tab的函数 或者下拉框之类的扩展
后台登陆通过脚本的方式 处理登陆的问题
forms的身份验证
不使用session 支持web园 会不会对数据库造成影响?
数据库拆分多少合适?
如何解决掉他的并发问题呢?
关于价格的问题 细致的考量
增加缓存的统一管理
后台设置货币 前台不能立即生效 并不是bug,应为货币在前面做了cookie的缓存设置
内存升的很厉害: 加入缓存中去 使用日志追踪函数 追踪所有的查询
head部分拆分
公共meta 部分
公共样式部分
公共脚本部分
<div class="header">
<!--注意编写规范-->
#parse("pc/template/_header_1.html")
</div>
<div class="nav_container">
#parse("pc/template/_nav_1.html")
</div>
网站初始化包括哪些东西?
前台和总后台的交互
剩余部分
脚本部分
会员中心部分
优惠策略
文件缓存
收藏夹部分
规范化的命名
日志部分
#region 测试
//测试是否识别字典类型 和 Hashtable
//Dictionary<string, string> option = new Dictionary<string, string>();
//Hashtable option = new Hashtable();
//option.Add("Color", "Black");
//option.Add("Size", "US 10 / UK 14 / EU 40");
//VContent.Put("p", option);
#endregion
WidGetCart
#region 1.0 Reload 暂时取消 效率不是很好
//object obj = VContent.Get(TagFields.RELOAD);
//if (obj == null)
//{
// VContent.Put(TagFields.RELOAD, string.Empty);
//}
#endregion
#region 1.0
//VContent.Put("form", forms);
//关于参数检查的问题 注意防止恶意请求的出现
//分为必须参数检查 和 公共参数检查 需要编写一个 页面助手值了的东西
//把每个 参数的默认规则写入进去
#endregion
-- 说明
-- 数据类型的简单说明
-- 支持五种数据类型
-- 整型 文本型 浮点型 时间类型 约束大小
-- 示例数据
-- name text not null collate nocase
-- phone text not null default ‘unknown‘
-- 时间 date :current_time current_date current_timestamp
-- 一些说明
-- 1.就是数据库中不要使用所谓的自增字段
-- 2.对于integer类型,在.net中对应的是Int64,建议在定义的时候使用int类型定义
-- 3.decimal类型也是如此,如果使用real类型,到.net中对应的是double类型的
-- 4.对于字符类型也是如此【这个需要测试】
统一一下几种类型
1.decimal类型小数位
2.时间类型
3.排序字段
4.开关值 0:false 1:true
5.默认值
导出Excel的组件 记得每次修改之后 将配置文件 复制到bin 目录中去
SQLite 在插入时间的时候 记得将时间 (“s”) 转换
如果SQLite在定义时间类型的时候 datetime 是null类型的话,记得将其设置一个默认值 否则的话 读取是会提示
“SQLite 查询时异常:该字符串未被识别为有效的 DateTime 错误”
Octopus系列之开发中灵光点收集,先放到这里,后面会整理的
标签:
原文地址:http://www.cnblogs.com/Sky-cloudless/p/4396640.html