灵活的运用Model类

简介:

1.定义接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace EssentialTools.Models
{
    public interface IValueCalculator
    {
        decimal ValueProducts(IEnumerable<Product> products);
    }
}

2.继承接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace EssentialTools.Models
{
    public class LinqValueCalculator : IValueCalculator
    {
        public decimal ValueProducts(IEnumerable<Product> products)
        {
            return products.Sum(p => p.Price);
        }
    }
}

3.购物车,商品对象,计算商品总价方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace EssentialTools.Models
{
    public class ShoppingCart
    {
        private IValueCalculator calc;

        public ShoppingCart(IValueCalculator calcParam)
        {
            calc = calcParam; // 引入其他类帮助
        }

        public IEnumerable<Product> Products { get; set; }

        public decimal CalculateProductTotal()
        {
            return calc.ValueProducts(Products);
        }
    }
}

4.控制器整合处理

private Product[] products = {
            new Product {Name = "Kayak", Category = "Watersports", Price = 275M},
            new Product {Name = "Lifejacket", Category = "Watersports", Price = 48.95M},
            new Product {Name = "Soccer ball", Category = "Soccer", Price = 19.50M},
            new Product {Name = "Corner flag", Category = "Soccer", Price = 34.95M}
        };

        public ActionResult Index()
        {

            IValueCalculator calc = new LinqValueCalculator();

            ShoppingCart cart = new ShoppingCart(calc) { Products = products }; // 购物车中的商品

            decimal totalValue = cart.CalculateProductTotal();

            return View(totalValue);
        }

5.页面展示

@model decimal

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Value</title>
</head>
<body>
    <div>
        Total value is $@Model
    </div>
</body>

</html>
本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6946493.html,如需转载请自行联系原作者

相关文章
|
7月前
|
前端开发 API 数据库
fastadmin框架调用model层的方法
fastadmin框架调用model层的方法
116 0
|
10月前
|
数据安全/隐私保护
nestjs装饰器聚合,让你的代码更加灵活,复用
nestjs装饰器聚合,让你的代码更加灵活,复用
|
Java 开发者
程序开发准备(定义 VO 类) | 学习笔记
简介:快速学习程序开发准备(定义 VO 类)
187 0
程序开发准备(定义 VO 类) | 学习笔记
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类进行方法注入的优缺点 )
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类进行方法注入的优缺点 )
124 0
|
机器学习/深度学习 人工智能 前端开发
AICompiler动态shape编译框架
欢迎走进走进阿里云机器学习PAI AICompiler编译器系列。近期,阿里云机器学习PAI团队全新上线一套Dynamic Shape Compiler框架,不仅作为AICompiler技术栈中原有的Static Shape Compiler框架的重要补充,更是增加了Compiler在企业级数据处理应用的无限可能,在提升数据处理效率的同时,大幅提升AI工程化效率。
1528 0
AICompiler动态shape编译框架
|
前端开发 .NET 数据库
一起谈.NET技术,使用View Model从表现层分离领域模型
MVC架构模式是近年来编程世界里最长被提及的模式之一,Model-View-Controller(模型-视图-控制器,MVC) 模式将你的软件组织并分解成三个截然不同的角色: Model 封装了你的应用数据、应用流程和业务逻辑。
960 0
去model化和数据对象
原文 简述 去model化这个说法其实有点儿难听,model化就是使用数据对象,去model化就是不使用数据对象。所以这篇文章主要讨论的问题就是:数据传递时,是否要采用数据对象?这里的数据传递并不是说类似RPC的场景,而是在单个工程内部,各对象之间、各组件之间、各层之间的数据传递。
856 0
|
Web App开发 XML 数据格式