转载请注明来自:http://blog.youkuaiyun.com/huntersjm/article/details/41013981
本文为某拍卖系统app的banner设计
1:由于保持运维修改的便利性,banner设计为数据库存储,具体表结构如下:
设计解释:a.设计中valid为该banner是否为有效,便于随时调整banner的有效性
b.设计中的starttime和endtime为开始时间,和结束时间,比如某活动在11.11凌晨开始有效,肯定不会在11.11凌晨去点击valid使得有效,所以采用
<优化:其实可以设置为自定义的时间格式内容,比如每周周末之类的等的方式,来保证更大的广度和可选性>
c.设计中user,为记录创建人和修改人,便于权限的控制和记录
d.设计中的控制基本为固定的省市区域性别,因为控制的方案是很固定的。<如果有其他需要,可以放置到control里面,来控制进行,与b一样可扩展性就很强了>
e.image为时间显示的图片,因为banner肯定是表观的显示为图片<可扩展,可以根据定义的action来控制扩展,比如不同情况来>
f.action为控制,控制点击banner的跳转,比如img$url...为跳转到图片 prd$productid为跳转到产品页面 url$url...为跳转到浏览器usr$userid 为跳转到用户页面等,控 制自定义化,模板化(采用$控制为减少浏览器编码冲突)
2:建议移动端设计模式,将传入的action解析,获取传入的图片地址,来获取图片(如果action为特殊,比如product可以通过product来获取)
设计标准: 通过设计对应每个类型的处理,通过统一接口来定义方法,通过java反射机制来获取对应的处理类,大大地提高了可扩展性和维护性,代码可读性等
简单的代码示例:<移动端根据此思想进行改动>
package com.test.deal;
public interface BaseDeal {
public String getPhoto();
public void action();
}
package com.test.deal;
public class DealImg implements BaseDeal{
@Override
public String getPhoto() {
System.out.println("get img url!");
return "Img url";
}
@Override
public void action() {
System.out.println("forward img!");
}
}
package com.test.deal;
public class DealProduct implements BaseDeal{
@Override
public String getPhoto() {
System.out.println("get product url!");
return "Product url";
}
@Override
public void action() {
System.out.println("forward product!");
}
}
package com.test.deal;
public class DealUrl implements BaseDeal{
@Override
public String getPhoto() {
System.out.println("get browser url!");
return "Browser url";
}
@Override
public void action() {
System.out.println("forward browser!");
}
}
package com.test.deal;
public class Operation {
public void banner(String banner){
String []banners = banner.split("$");
if(banners.length!=2){
System.err.println("error input!");
return;
}
BaseDeal baseDeal = null;
try {
baseDeal = (BaseDeal) Class.forName("com.test.deal.Deal"+banners[0]).newInstance();
} catch (InstantiationException e) {
System.err.println("This class can't be instantiated!");
e.printStackTrace();
} catch (IllegalAccessException e) {
System.err.println("This class can't be access!");
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.err.println("This class not exists!");
e.printStackTrace();
}
if(baseDeal!=null){
String bannerUrl = baseDeal.getPhoto();
//download bannerUrl operation to display
baseDeal.action();
}else{
System.err.println("class cast error!");
}
}
}
3:总结:该方法的可扩展性,维护性,代码可读性大大增加,便于后期代码的继续开发。