Octopus开发过程各个技术点--在此做个记录

自定义了页面周期

使用唯一的一个VelocityEngine全局的静态实例,优化了小泥鳅blog中每次请求都要创建VelocityEngine实例对象,减少了对象的开销

通过UA判断请求来自的设备,从而初始化不同的模板目录,从而实现手机和PC访问展示出不同的页面效果

一次请求的生命周期

参数初始化 Page_Init:

初始化请求上下文对象

请求对象

Cookie对象

货币对象

语言对象

初始化货币执行业务逻辑并写入到客户端的Cookie中

验证用户的身份 Authenticate_User

页面预加载 Page_PreLoad:会加载一些公共的数据,比如:图片URL地址,广告图片地址...;加载语言包数据;判断Form参数个数引发Post事件

页面加载事件 Page_Load:需要留给各个子页面实现,必须实现的一个,主要在子页面中完成各自的业务处理,数据获取与填充

页面预结束事件 Page_PreEnd:暂时还没有做处理

页面结束事件 Page_End:合并模板和业务数据

this.pcMobile【判断请求时做的初始化】 + this.templateFile 【在各个子页面重写Page_Load事件时做初始化】

用户验证逻辑的实现

使用虚拟的protected virtual void Authenticate_User()来实现,这样可以被子类重写,从而可以做后台管理类的程序,比如会员中心里面的页面,需要用户登录之后才能访问

判断用户登录使用的是检查session中登陆的用户对象来实现的 同时还有关于匿名用户登陆的问题,这个在后面解决

产品价格--多货币的实现

多货币 它属于每个访客自定义的数据,所以它不能存储在Application中,应该存储在Cookie中,或者session中

Octopus使用是Cookie的方式实现的

不让Entity承担过多的业务逻辑

在写的过程中,为货币Cookie的问题困扰了好久,产品价格的计算需要,产品对象拿到货币对象之后才能进行

起初我是在Entity中读取Cookie值来获得货币对象,后来发现这样做不好

一是,每个产品对象的创建需要不能的读取cookie

二是,在ProductInfo 实体中承担了过多的业务处理逻辑

再者,好像在entity中不应该有访问Cookie之类的代码吧,

后来进行了改进,将这部分代码转移到业务层,在业务层中接收CurrencyInfo对象,对ProductInfo对象做属性的初始化,这样解决了这个问题

同时cookie的读取则转移到了表现层的Page_Load中,而且并不是直接访问cookie,而是在数据上下文容器中取得货币符号,进而得到货币兑现来实现的

这个算是比较成功一次代码的升级

时间: 2024-10-14 11:55:10

Octopus开发过程各个技术点--在此做个记录的相关文章

我们除了技术,还应该做的10件事情

每天是否重复着同样的事情?坐在电脑前面,不觉已经15,6个小时呢?我们在为计算机,互联网技术痴迷的同时,是不是同时也失去了很多,是否还记得清晨那纯澈的朝阳,黄昏那绚丽的晚霞,或许夕阳照射进办公室的那个转瞬,你还在办公桌前,琢磨着某一个瓶颈,缓和一下,你每天紧绷的神经吧,何必要为所谓的末尾淘汰而如老骥伏枥,合理的安排好自己的学习计划,工作计划,生活计划,毕竟人活着才是你在生命周期内的唯一真实存在. 做一做下面的10件事情吧,或许生活会更加的丰富 1.感受一下你身边久违的亲人,朋友,他们还好吗,大声

cookie技术案例-用户浏览商品的记录

1引言 你点击了桌面上的Chrome图标,一个浏览器窗口出现了,输入网址就可以在Internet世界愉快玩耍.这一切是怎么实现的呢?Chromium这个多进程的程序是如何启动各个进程的呢?浏览器主进程(界面进程)启动了哪些线程?如何启动的呢?这些问题一直萦绕在心头,一起来看看源代码吧.本文主要针对Chromium for Mac的源代码,其它操作系统大同小异. 2背景知识 浏览器作为一个应用程序,是以进程的形式运行在操作系统上的.首先,Chromium是一个多进程的应用程序,我们需要了解Chro

老出现这样问题现在做个记录:android.os.NetworkOnMainThreadException

1.一方面添加handler处理 2.方面添加下面的配置. 3.然后在主的activity中调用 //访问网络webservice兼容高版本 Utils.setSystemVersionMethod(context); 下面写在工具类中,然后在activity中调用 在调用qq快捷登录有时候会报这样的错误.原因在4.0以上不兼容webservice访问网络 //获得手机版本防止webservice访问网络在4.0以上出现问题 public static String GetSystemVersi

给不小心惹上的家伙们做个记录...

Java \ Python \ RPC \ mongoDB \ memcached \ hornetQ \ Jetty \ Maven \ Redis \ H2 \ Clustor \ spring \ vertx 给不小心惹上的家伙们做个记录...

【BZOJ做题记录】07.07~?

在NOI一周前重开一个坑 最后更新时间:7.07 11:26 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后面的部分就好了 BZOJ1258: [CQOI2007]三角形tri:在草稿纸上按照位置和边找一下规律就好了 BZOJ1260: [CQOI2007]涂色paint:简单的区间DP BZOJ1303: [CQOI2009]中位数图:小于中位数的改为-1大于的改为1,算一算前缀和然后哈希一下乘一乘就好

project euler做题记录

ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{array}{c} S(n) & = & \sum_{i = 1} ^ n \sum_{p = 1} ^ i \sum_{q = p + 1} ^ i \frac {1}{pq}[p + q \geq i][gcd(p, q) = 1] \& = & \sum_{i = 1} ^

退役前的做题记录5.0

退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树,这样跨越\(mid\)的点对之间的最短路一定会经过\(mid\),因此两点之间的最短路径就可以描述成最短路树上的两段到根路径.对每棵最短路树处理\(dfs\)序,用树状数组维护权值修改即可. [Wannafly挑战赛4F]线路规划 类似SCOI2016萌萌哒一题,并查集\(f_{i,j}\)表示从

后缀自动机做题记录

目录 后缀自动机做题记录 sp1811 sp1812 sp10570 luogu 2463 CF873F TJOI2015 弦论 AHOI2013 差异 HEOI2016/TJOI2016 字符串 HAOI2016 找相同字符 SDOI2016 生成魔咒 ZJOI2015 诸神眷顾的幻想乡 留坑待填 广义SAM 其他 NOI原题练习 后缀自动机做题记录 来填之前的坑了...考后大概会做做有字符串的综合题吧 sp1811 lcs板子,对于第一个串建出SAM,第二个串在上面跑,即可求出对于每一个位置

清华集训2014 做题记录

清华集训2014做题记录 已完成 [清华集训2014]玛里苟斯 [清华集训2014]主旋律 [清华集训2014]奇数国 [清华集训2014]矩阵变换 [清华集训2014]sum [清华集训2014]虫逢 [清华集训2014]玄学 [清华集训2014]文学 未完成 [清华集训2014]卡常数 [清华集训2014]简单回路 [清华集训2014]Router [清华集训2014] Breaking Bomber 写一题要膜一题题解,膜完题解膜代码,膜完代码膜指导,膜了好几天了还有四个题没做. [清华集