把业务逻辑变成数据结构和SQL语句的例子。自然架构改成自然框架

简介:     更正:和大家交流了一下,发现现在就叫做架构有一点大,还是叫做框架更准确一些,就叫做自然框架吧。     目前自然框架的内容包括三个部分:使用自定义控件快速实现增删改查和导出Excel、通用权限、个性化设置。

 

    更正:和大家交流了一下,发现现在就叫做架构有一点大,还是叫做框架更准确一些,就叫做自然框架吧。

    目前自然框架的内容包括三个部分:使用自定义控件快速实现增删改查和导出Excel、通用权限、个性化设置。

 

    上一篇里 球球 同学询问“不太明白需求是怎么转化为数据库的。比如一个最简单的会员例子,累计1万消费以上是一级会员,5000消费以上是2级会员,买商品属于1级会员的8折,属于2级会员的9折,这个业务逻辑要怎么转化成数据库?”那我就以这个作为例子说一下吧。

 

     根据这个需求我们可以得到以下几个已知条件
1、有会员信息——会员表。
2、会员要有等级,建立一个会员等级表。
3、会员的等级是依据累计消费金额而定。5000元以上是二级会员,10000元以上是一级会员。
4、有产品信息——产品表。
5、会员购买产品可以享受折扣,折扣根据会员的级别而定。

 

    问题
1、会员级别的确定?
2、如何获得会员购买商品的折扣?

我们可以在数据库里面建立四个表:【会员表】、【会员等级表】、【产品表】、【会员享受的折扣表】。
【示意图】。

 

 

 

(这里的商品表怎么还有商品等级ID呢?折扣表里面也有?这个后面的需求扩展里面的,本来要做两套图的,俺就偷懒了)

 

    回答
1、会员级别是依据会员的消费累计金额来确定的,那么当前的会员消费金额就是已知条件,我们可以把它作为函数的参数,于是我们可以写一个函数:

 

private   int  SetMemberLevelID( int  memberID, int  money)
        {
            DataAccessLayer dal 
=   new   DataAccessLayer();
            
            
// 依据累计的消费金额,确定会员的等级
            sql  =   " SELECT TOP 1 会员级别ID FROM Demo_会员级别表 WHERE (消费金额 <  " +  money  + " ) " ;
            
string  会员级别ID  =  dal.RunSqlGetID(sql);

            
// 修改会员的等级
            sql  =   " update Demo_会员表 set 会员级别ID =  "   +  会员级别ID  +   "  where memberID=  "   +  memberID.ToString();
            dal.RunSql(sql);

            
        }

 

 

    当然我们也可以把第一个SQL语句作为一个子查询,加在第二个SQL语句里面。
    或者如果我们可以知道会员原先的级别的话,我们可以先做一下比较,会员级别变化的时候在修改会员的等级。

 

2、这个就简单了,会员享受的折扣是和等级相关的,我们有了会员享受的折扣表,写一条SQL语句就出来了。

 

sql  =   " select 折扣 from Demo_会员级别折扣表 where 会员级别ID = 1 " ;

 

 

    不知道这个是不是求求想要的。

 

    功能扩展

     这个会员折扣的例子,让我想起来了去年看的一篇帖子,和这个很像,区别在于商品也是分等级的,不同的会员等级对应不同的产品等级可以享受不同的折扣,比如会员有三个等级——一级、二级、三级,产品有两个等级——优等、一般。
那么就会出现一个笛卡尔乘积的形式:


一级会员购买优等商品享受九折,
一级会员购买一般商品享受八折,
二级会员购买优等商品享受九五折,
二级会员购买一般商品享受八五折,
三级会员购买优等商品享受九九折,
三级会员购买一般商品享受九折。

 

    以前的那个帖子的要求就是如何依据会员的等级和商品的等级来判断享受的折扣。

    我们看看如何来解决这个问题。我们的商品表里面加上商品等级字段,在【会员享受的折扣表】里面也加上一个商品等级ID字段。剩下的就不用说了吧,只需要稍稍改一下那个SQL语句就可以了。

 

sql  =   " select 折扣 from Demo_会员级别折扣表 where 会员级别ID = 1 and 商品级别ID = 1 " ;

 

    如果您也看多那篇帖子的话,您会发现那篇帖子用了好长的代码才解决,当然人家是用了OO的方法,好像解决的还挺巧妙地,我的OO水平还不够,没有看懂。

 

FAQ

1、为什么要建立【会员等级表】、【商品等级表】?
     因为建立表以后,就可以做一个维护程序让客户自己维护这两个级别。

2、为什么要建立【会员享受的折扣表】?
    理由同上,我们也可以做一个维护程序,这样享受什么样的折扣,客户就可以随时修改了。

 

ps: 博客园北京俱乐部第三次技术活动(2009/05/23) 

 

相关文章
|
13天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1月前
|
SQL 数据采集 自然语言处理
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
|
18天前
|
人工智能 前端开发 JavaScript
前端架构思考 :专注于多框架的并存可能并不是唯一的方向 — 探讨大模型时代前端的分层式微前端架构
随着前端技术的发展,微前端架构成为应对复杂大型应用的流行方案,允许多个团队使用不同技术栈并将其模块化集成。然而,这种设计在高交互性需求的应用中存在局限,如音视频处理、AI集成等。本文探讨了传统微前端架构的不足,并提出了一种新的分层式微前端架构,通过展示层与业务层的分离及基于功能的横向拆分,以更好地适应现代前端需求。
|
1月前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
76 0
|
3月前
|
SQL Java 数据库
建模底层逻辑问题之ORM框架建模中,执行SQL的过程中被抽象和组织是如何实现的
建模底层逻辑问题之ORM框架建模中,执行SQL的过程中被抽象和组织是如何实现的
|
3天前
|
监控
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
通过引入稀疏化和角色多样性,SMoA为大语言模型多代理系统的发展开辟了新的方向。
16 6
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
|
1月前
|
JSON 前端开发 Java
Spring Boot框架中的响应与分层解耦架构
在Spring Boot框架中,响应与分层解耦架构是两个核心概念,它们共同促进了应用程序的高效性、可维护性和可扩展性。
46 3
|
1月前
|
算法 安全 Java
【用Java学习数据结构系列】探索Java集合框架的无尽秘密pro
【用Java学习数据结构系列】探索Java集合框架的无尽秘密pro
18 1
|
2月前
|
机器学习/深度学习
ACM MM24:复旦提出首个基于扩散模型的视频非限制性对抗攻击框架,主流CNN和ViT架构都防不住它
【9月更文挑战第23天】复旦大学研究团队提出了ReToMe-VA,一种基于扩散模型的视频非限制性对抗攻击框架,通过时间步长对抗性潜在优化(TALO)与递归令牌合并(ReToMe)策略,实现了高转移性且难以察觉的对抗性视频生成。TALO优化去噪步骤扰动,提升空间难以察觉性及计算效率;ReToMe则确保时间一致性,增强帧间交互。实验表明,ReToMe-VA在攻击转移性上超越现有方法,但面临计算成本高、实时应用受限及隐私安全等挑战。[论文链接](http://arxiv.org/abs/2408.05479)
70 3
|
2月前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
57 5
下一篇
无影云桌面