SAAS云平台搭建札记: (一)浅论SAAS多租户自助云服务平台的产品、服务和订单

本文介绍了一个多租户的云SAAS软件自助服务平台的设计思路,包括产品、服务、订单等核心概念及其相互关系,并通过代码示例展示了购物车类的设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近在做一个多租户的云SAAS软件自助服务平台,途中遇到很多问题,我会将一些心得、体会逐渐分享出来,和大家一起探讨。这是本系列的第一篇文章。

    大家知道,要做一个全自助服务的SAAS云平台是比较复杂的,稍微有些漏洞,就会被不法分子钻漏洞,牵涉到一些金钱上的纠纷。因此,一开始的设计就比较重要了。说到云自助服务平台,可能和网上购物、在线商城有些类似,但里面提供的是相关服务,还是有些区别的,我在这里先讲几个概念:

  • 产品:产品即服务,即是提供给用户的服务。产品有单价,有些产品是基础产品,用户购买正式产品必须免费提供的,产品可以提供给用户进行试用。
  • 模块:产品包括很多模块,有些模块是必然会提供给用户的,比如 操作人员管理、操作日志 等,还有些模块是可选的,用户针对自己的情况进行购买,类似增值服务,比如移动端、企业主页等。另外还有些一次性的服务,比如系统数据对接硬件设备购买等;
  • 服务:用户所能享受到的服务,有一定的使用期限;
  • 订单:用户根据所拥有的 服务 所下的订单(而不是产品哦,为什么?);
  • 购物车:在用户订单生成前先把产品放在购物车里,购物车有很多类别,有的购物车是对目前服务进行的延期,有些是把试用的产品转为正式,有些是对现有服务模块的增删,牵涉到追加购买等。购物车操作频繁、需要做非常多的校验,要和已经购买的服务做无缝的对接,这也是云SAAS产品和普通电商很大不同的地方。到了订单阶段,就相对比较简单了,生成订单后将购物车清空、可以生成多张订单,支付的时候再做一遍校验。

     总体的概念流程是 服务->产品->购物车->订单->服务

    上一张购物车验证规则的流程图

 

    一些类(还没有全部完成):

    对实体类的操作大都采用工厂方式:

    购物车类代码:

    public class UserCart
    {
        public string UserId { get; set; }
        /// <summary>
        /// 设置域名
        /// </summary>
        public string ServiceIndentify { get; set; }
        public OrderType OrderType { get; set; }
        public IList<UserCartProduct> UserCartProducts { get; set; }
        public float TotalPrice
        {
            get
            {
                if (OrderType == OrderType.Experience)
                {
                    return 0;
                }
                else
                {
                    return UserCartProducts.Sum(p => p.Price);
                }
            }
        }
        public virtual IList<UserCartProduct> UserCartProduct { get; set; }
    }

    public class UserCartProduct
    {
        public string ProductId { get; set; }
        public int ProductBasePrice { get; set; }
        public Period Period { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
        public IList<string> UserCartProductBasicModules { get; set; }
        public IList<UserCartAddtionalModule> UserCartProductAddtionalModules { get; set; }
        public IList<UserCartAddtionalService> UserCartAddtionalServices { get; set; }
        public IList<UserCartOption> UserCartOptions { get; set; }
        public float Price
        {
            get
            {
                return ProductBasePrice
                    + UserCartProductAddtionalModules.Sum(m => m.UintPrice.GetPriceByPeriod(Period))
                    + UserCartAddtionalServices.Sum(m => m.UintPrice.GetPriceByPeriod(new Period(PeriodType.Times, m.Quantity)))
                    + UserCartOptions.Sum(m => m.UintPrice.GetPriceByPeriod(Period));
            }
        }
        public virtual UserCart UserCart { get; set; }
    }

    public class ModuleBase
    {
        public string ModuleId { get; set; }
        
        public PeriodPrice UintPrice { get; set; }

    }

    public class UserCartAddtionalModule: ModuleBase
    {
    }

    public class UserCartAddtionalService : ModuleBase
    {
        public int Quantity { get; set; }
    }

    public class UserCartOption: ModuleBase
    {
        public string CheckId { get; set; }
        public string OriginCheckedId { get; set; }
        public PeriodPrice OriginPeriodPrice { get; set; }
    }

    其他类类似。

    大家对这块有什么好的意见和建议,希望能够提出来。

 

   SAAS云平台搭建札记系列文章:

   SAAS云平台搭建札记: (一)浅论SAAS多租户自助云服务平台的产品、服务和订单

   SAAS云平台搭建札记: (二)Linux Unbutu下.Net Core整套运行环境的搭建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值