一:分析需求,从而发现有以下类
按照个人习惯,从用户角度以及系统角度两个角度去探寻类,并且缕清其中的关系:
用户
1 user类 有id name password 参数,getset方法,并且有一个方法用于隐藏用户名字(有的时候,方法不一定能实时想到,可能后期才能想到需要的方法,这个时候一般是看客户的需求文档,若没有需求文档则只能通过自身经验进行)
2 review类,既然是做一个购物网站,自然要有评价,id ,content, uid(user id),pid(product id),createDate,有的评论还有追评功能、图片评论、视频评论,这些暂时不提,先最基本的文字评论。
系统
3 category类,选购的时候,进入系统,显然是先在一个大的分类里面去寻找,id,name,
4 product类,产品类,产品自然是必不可少的,id,name,originalPrice,promotePrice(因为很多都有优惠价),stock,包括炫酷的标题subTitle。
5 property类,值类,比如电脑:CPU,处理器等多种property,所有的电脑类都包含的基本参数,有id,cid,name
6 propertyValue 上方的值,需要加上id,pid,ptid,name,知道是哪个产品,哪个类的参数。
7 order类,订单类,买了东西自然有订单,id,orderNumber(订单号),receiver(收货人),address(收货地址),telephone(电话),pid,createDate,种种,只是为了证明你此时此刻一共花了多少钱,买了什么东西,
8 orderItem类,订单项,因为很多地方会比拼到订单数量,且为了不糅杂,只有id,uid,pid,oid(哪个单子里买的,具体信息),num
9 productimage 存放产品的图片,可以用来显示图片,后期再修改
分析完类之后,可以总结这种思想方式,从用户的角色,后台的角色进行分析;或者通过自然事件发生的时间进行分析。
可以有以下类
User
package tmall.bean;
public class User {
private String password;
private String name;
private int id;
/**
* 这个类比较简单,分别对应账号、密码、id
* 并且有一个隐藏用户名的方法
* */
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAnonymousName() {
if (null == name) {
return null;
}
if (name.length() <= 1) {
return "*";
}
if (name.length() == 2) {
///因为并不想改变name的值,只是这个方法需要隐蔽名字而已,所以没有对name更改
return name.substring(0, 1) + "*";
}
if (name.length() >= 2) {
char[] cs =name.toCharArray();
for (int i = 1; i < cs.length-1; i++) {
cs[i]='*';
}
}
return "a";
}
}
Review类
package tmall.bean;
import java.util.Date;
public class Review {
private String content;
private Date createDate;
private User user;
private Product product;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
Category类,注意观察与Product类的联系
package tmall.bean;
import java.util.List;
public class Category {
private String name;
private int id;
List<Product> products;
List<List<Product>> productsByRow;
//因为productsByRow,当后期页面要显示的时候,一个分类只有4个示例,有很多排,这里就需要了
/**
* {
* 三行八列
* {1,2,3,4,5,6,7,8}
* {A,B,C,D,E,F,G,H}
* {X,X,X,X,X,X,X,X}
*
* }
* */
//比如冰箱分类 有三个子,但是每个子都是一个集合,形成了三排 每排对应其对应的集合,用于展示,并不是说本身需要这个
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Category [name=" + name + "]";
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public List<List<Product>> getProductsByRow() {
return productsByRow;
}
public void setProductsByRow(List<List<Product>> productsByRow) {
this.productsByRow = productsByRow;
}
}
Product类
需关注以下几点:category,和Category类形成对比,可看出对应关系,一个目录可以有多个product
而产品图片根据需要也划分了首页(从一般图片中选第一个,默认图片)、一般图片、长图片、图片等四类,销量、评论数等
package tmall.bean;
import java.util.Date;
import java.util.List;
public class Product {
private String name;
private String subTitle;
private float orignalPrice;
private float promotePrice;
private int stock;
private Date createDate;
private Category category;
private int id;
private ProductImage firstProductImage;
private List<ProductImage> productImages;
private List<ProductImage> productSingleImages;
private List<ProductImage> productDetailImages;
private int reviewCount;
private int saleCount;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSubTitle() {
return subTitle;
}
public void setSubTitle(String subTitle) {
this.subTitle = subTitle;
}
public float getOrignalPrice() {
return orignalPrice;
}
public void setOrignalPrice(float orignalPrice) {
this.orignalPrice = orignalPrice;
}
public float getPromotePrice() {
return promotePrice;
}
public void setPromotePrice(float promotePrice) {
this.promotePrice = promotePrice;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String toString(){
return name;
}
public ProductImage getFirstProductImage() {
return firstProductImage;
}
public void setFirstProductImage(ProductImage firstProductImage) {
this.firstProductImage = firstProductImage;
}
public List<ProductImage> getProductImages() {
return productImages;
}
public void setProductImages(List<ProductImage> productImages) {
this.productImages = productImages;
}
public List<ProductImage> getProductSingleImages() {
return productSingleImages;
}
public void setProductSingleImages(List<ProductImage> productSingleImages) {
this.productSingleImages = productSingleImages;
}
public List<ProductImage> getProductDetailImages() {
return productDetailImages;
}
public void setProductDetailImages(List<ProductImage> productDetailImages) {
this.productDetailImages = productDetailImages;
}
public int getReviewCount() {
return reviewCount;
}
public void setReviewCount(int reviewCount) {
this.reviewCount = reviewCount;
}
public int getSaleCount() {
return saleCount;
}
public void setSaleCount(int saleCount) {
this.saleCount = saleCount;
}
}
Property
package tmall.bean;
public class Property {
private String name;
private Category category;//因为是外键 所以需要
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
}
PropertyValue
package tmall.bean;
public class PropertyValue {
private String value;
private Product product;
private Property property;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Property getProperty() {
return property;
}
public void setProperty(Property property) {
this.property = property;
}
}
ProductImage
产品图片
package tmall.bean;
public class ProductImage {
private String type;
private Product product;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
Order类
可以登录天猫,登录后查看我的订单,体验其中的差异,
注意有个status的属性,删除了不一定是真删除了,是被隐藏起来了
package tmall.bean;
import java.util.Date;
import java.util.List;
//import tmall.dao.OrderDAO;
public class Order {
private String orderCode;
private String address;
private String post;
private String receiver;
private String mobile;
private String userMessage;
private Date createDate;
private Date payDate;
private Date deliveryDate;
private Date confirmDate;
private User user;
private int id;
private List<OrderItem> orderItems;
private float total;
private int totalNumber;
private String status;
public String getStatusDesc(){
String desc ="未知";
switch(status){
// case OrderDAO.waitPay:
// desc="待付款";
// break;
// case OrderDAO.waitDelivery:
// desc="待发货";
// break;
// case OrderDAO.waitConfirm:
// desc="待收货";
// break;
// case OrderDAO.waitReview:
// desc="等评价";
// break;
// case OrderDAO.finish:
// desc="完成";
// break;
// case OrderDAO.delete:
// desc="刪除";
// break;
// default:
// desc="未知";
}
return desc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPost() {
return post;
}
public void setPost(String post) {
this.post = post;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getUserMessage() {
return userMessage;
}
public void setUserMessage(String userMessage) {
this.userMessage = userMessage;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getPayDate() {
return payDate;
}
public void setPayDate(Date payDate) {
this.payDate = payDate;
}
public Date getDeliveryDate() {
return deliveryDate;
}
public void setDeliveryDate(Date deliveryDate) {
this.deliveryDate = deliveryDate;
}
public Date getConfirmDate() {
return confirmDate;
}
public void setConfirmDate(Date confirmDate) {
this.confirmDate = confirmDate;
}
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public String getOrderCode() {
return orderCode;
}
public void setOrderCode(String orderCode) {
this.orderCode = orderCode;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<OrderItem> getOrderItems() {
return orderItems;
}
public void setOrderItems(List<OrderItem> orderItems) {
this.orderItems = orderItems;
}
public float getTotal() {
return total;
}
public void setTotal(float total) {
this.total = total;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public int getTotalNumber() {
return totalNumber;
}
public void setTotalNumber(int totalNumber) {
this.totalNumber = totalNumber;
}
}
OrderItem 订单类,和订单分开了,不能杂糅。相当于系统大数据
package tmall.bean;
public class OrderItem {
private int number;
private Product product;
private Order order;
private User user;
private int id;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
基本的类就创建好了,可以细细品味其中区别,在有新的需求或者业务产生时,类、数据库有可能会随之变化,这其实是很耗费精力的,所以我们力求一次性把类都建好。至少在这个项目中是用这个方式。