5-23

MVC(Model/View/Controller)模式是国外用得比较多的一种设计模式,好象最早是在Smaltalk中出现。MVC包括三类对象。Model是应用对象,View是它在屏幕上的表示,Controller定义用户界面对用户输入的响应方式。
模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用。
1、模型(Model)

模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑.

2、视图(View)

视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。

3、控制器(controller)

控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。



MVC 式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性可移植性和组件的可复用性

早期的程序中,如果不注意对数功能和显示的解耦合,常常会导致程序的复杂及难以维护。很多VB,Delphi等RAD程序都有这种问题。甚至现在的C#,Java有时候也会出现把业务逻辑写在显示模块中的现象

管MVC设计模式很早就提出,但在Web项目的开发中引入MVC却是步履维艰。主要原因:一是在早期的Web项目的开发中,程序语言和HTML的分离一直难以实现。CGI程序以字符串输出的形式动态地生成HTML内容。后来随着脚本语言的出现,前面的方式又被倒了过来,改成将脚本语言书写的程序嵌入在HTML内容中。这两种方式有一个相同的不足之处即它们总是无法将程序语言和HTML分离。二是脚本语言的功能相对较弱,缺乏支持MVC设计模式的一些必要的技术基础。直到基于J2EE的JSP Model 2问世时才得以改观。它用JSP技术实现视图的功能,用Servlet技术实现控制器的功能,用JavaBean技术实现模型的功能

JSP Model 1 与 JSP Model 2

SUN在JSP出现早期制定了两种规范,称为Model1和Model2。虽然Model2在一定程度上实现了MVC,但是它的应用用并不尽如人意




JSP Model 1




JSP Model 2

model2 容易使系统出现多个Controller,并且对页面导航的处理比较复杂

有些人觉得model2仍不够好,于是Craig R. McClanahan 2000年5月提交了一个WEB framework给Java Community.这就是后来的Struts.

2001年7月,Struts1.0,正式发布。该项目也成为了Apache Jakarta的子项目之一

Struts 质上就是在Model2的基础上实现的一个MVC架构。它只有一个中心控制器,他采用XML定制转向的URL。采用Action来处理逻辑

转载于:https://www.cnblogs.com/huzhen/p/3750329.html

<think>嗯,用户现在想了解Excel中的DATEDIF函数,特别是用参数'd'来计算两个日期之间的天数。我之前已经回答过他们关于季度日期计算的问题,现在他们可能在做更复杂的时间计算,比如工龄或者项目周期。需要先确认他们提供的例子是否正确,并且确保参数解释清楚。 首先,用户给出的例子是DATEDIF('2007-5-23', '2016-5-24', 'd'),根据引用3和5,参数'd'应该返回两个日期之间的总天数。但根据引用3中的例子,当使用"d"时,计算结果是3289天,而用户例子中的结果是否正确呢?需要验证一下。 另外,引用3中提到DATEDIF的参数unit有"y"、"m"、"d"、"md"、"ym"、"yd",其中"d"是总天数。用户可能需要知道每个参数的区别,但当前问题集中在'd'参数上。所以需要详细解释这个参数的作用,以及如何正确使用函数。 还要注意用户可能遇到的常见错误,比如日期格式不正确,或者起始日期晚于结束日期导致错误。这时候可能需要提到使用IFERROR函数来处理错误,如引用4中提到的IFERROR函数,可以增强公式的健壮性。 另外,用户之前的问题涉及到季度计算,现在转到DATEDIF,可能是在处理员工工龄、项目持续时间等,需要将两个日期之间的天数转换为年、月、日,或者单独的天数。比如,财务计算中的利息天数,或者项目进度的跟踪。 需要确保用户理解DATEDIF的语法,参数顺序是start_date, end_date, unit,并且日期必须是有效的Excel格式。如果日期是文本格式,可能需要用DATE函数转换,比如DATE(2007,5,23)。 在解释用法时,可以分步骤说明,比如先提取年份,再计算月份差,最后天数,但'd'参数直接给出总天数。同时,提醒用户注意结束日期是否在开始日期之后,否则会返回错误。 最后,用户可能需要知道实际应用场景,比如计算工龄天数,或者两个事件之间的间隔天数,这时候可以结合之前的季度计算,比如从季度的第一天到某个日期的天数,或者不同季度之间的天数差异。 总结回答结构:先说明函数作用,参数解释,然后具体示例计算,注意事项,应用场景,可能的相关问题。同时检查引用内容是否准确,确保引用的例子与用户的问题一致,避免混淆。</think>### Excel DATEDIF函数详解:`DATEDIF('2007-5-23', '2016-5-24', 'd')` #### 一、函数作用 `DATEDIF` 是Excel中用于计算**两个日期之间的差值**的隐藏函数,支持按年、月、日等单位返回结果。 **公式语法**: $$ \text{DATEDIF}(start\_date, end\_date, unit) $$ - **参数解释**: - `start_date`:起始日期 - `end_date`:结束日期 - `unit`:指定返回结果的单位(如 `"d"` 表示天数)[^3][^5]。 --- #### 二、参数 `"d"` 的具体含义 **功能**:计算两个日期之间的**总天数**(包含起始和结束日期之间的所有天数)。 **示例**: `DATEDIF("2007-5-23", "2016-5-24", "d")` - **计算逻辑**: 从 `2007-5-23` 到 `2016-5-24` 的总天数。 - **结果**: $$ 3289 \text{ 天} $$ 验证方式:`=DATE(2016,5,24)-DATE(2007,5,23)` 也会返回相同结果[^3]。 --- #### 三、关键注意事项 1. **日期格式要求**: - 日期需为Excel可识别的格式(如 `"YYYY-MM-DD"` 或使用 `DATE` 函数生成)。 - 若日期为文本格式,需用 `DATEVALUE` 转换(如 `DATEVALUE("2007-5-23")`)[^4]。 2. **顺序要求**: - `end_date` 必须晚于或等于 `start_date`,否则返回 `#NUM!` 错误[^3]。 3. **错误处理**: - 若输入无效日期或单位参数,可用 `IFERROR` 函数捕获错误: ```excel =IFERROR(DATEDIF(A1, B1, "d"), "日期错误") ``` 避免显示 `#NUM!` 或 `#VALUE!`[^4]。 --- #### 四、应用场景 1. **工龄计算**: - 计算员工入职至今的总天数: ```excel =DATEDIF(入职日期, TODAY(), "d") ``` 2. **项目周期统计**: - 跟踪任务从开始到结束的总耗时[^2]。 --- ### 相关问题 1. 如何用 `DATEDIF` 计算两个日期之间的整年数(参数 `"y"`)? 2. 如果忽略年份仅比较天数(如生日提醒),应使用哪个参数? 3. 如何结合 `DATEDIF` 和 `TODAY()` 实时更新数据? --- ### 附:参数 `unit` 的完整说明[^3][^5] | 参数 | 含义 | 示例结果(2007-5-23 至 2016-5-24) | |------|------------------------|------------------------------------| | `"y"` | 整年数 | 9 年 | | `"m"` | 整月数 | 108 个月 | | `"d"` | **总天数** | 3289 天 | | `"md"`| 忽略年月,仅计算天数差 | 1 天(523日 → 5月24日) | | `"ym"`| 忽略年,计算月数差 | 0 个月(5月 → 5月) | | `"yd"`| 忽略年,计算天数差 | 1 天(523日 → 5月24日) |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值