Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用MVC框架构建大坝

用MVC框架构建大坝
EN

Software Engineering用户
提问于 2017-06-14 03:27:45
回答 1查看 294关注 0票数 2

我熟悉OOP和PHP,但我对MVC框架很陌生。我目前正在使用Laravel,到目前为止我发现它很棒,但是随着我的进步,事情变得越来越棘手,现在我意识到我需要重新思考我的架构。

该项目是一个小型客户的数字资产管理,但我仍然希望确保我正在开发它,我可以,尽管它的大小。

基本的对象关系是:

  • 一个项目可以有很多部分。
  • 一个部分可以有许多资产。

看起来很简单,对吧?

我的项目运行良好,使用了REST,但我不知道如何处理这些部分和资产。

有6种类型的部分,项目可以有其中之一:例如。照片,外部链接,关于,视频等。

其中一些部分包含一个或多个资产。例如,“关于”部分只能包含一个文本体,但是“照片”部分可以包含许多照片。每种类型的资产都有一组不同的属性。

关于逼近

的想法

如果我用普通PHP编写这篇文章,我可能会有一个Asset对象,然后有照片,关于,外部链接,那个扩展的资产。

我想的越多,我就越怀疑我是否也需要一个节对象。

考虑到我使用的是MVC,我不确定是否应该为每种资产类型设置不同的控制器和模型,或者这是否过分。也许我应该有一个资产模型(和一个资产控制器),然后为每个扩展该模型的资产类型建立更多的模型。

任何帮助,以帮助我的想法,以便更好地使用MVC将不胜感激。

更新:进一步思考

有了更多的时间思考,学习了更多关于MVC的知识,并考虑了@RobertHarvey的评论,我开始更多地思考我选择的模型。我开始认为这就是这个问题(和它的解决方案)的真正所在。

我已经开始建立一个模型为每一节类型和资产类型(例如。VideoSection和VideoAsset是我现在的两种型号。

一个项目可以有一个VideoSection。一个VideoSection可以有许多VideoAssets。祈祷这是个很好的方法。

EN

回答 1

Software Engineering用户

发布于 2017-06-15 02:48:52

这是非常主观和抽象的,但下面的方法帮助我在过去。

当我遇到这样的设计挑战时,我使用的是MVC风格的设计模式。我发现专注于三个关于应用程序将如何处理状态的问题是有帮助的。对我来说,根据我的数据状态来处理行为的决定,在大多数情况下都会自然而然地把事情安排好。

1)示范“事物”:

这东西有状态吗?如果是:考虑为这个“东西”创建一个或多个模型对象。

2)主计长“物品”:

我在乎这件事改变状态吗?如果是的话:考虑创建一个控制器来处理行为,以响应这个“事物”状态的变化。

3)看待“事物”:

我需要展示这东西的状态吗?如果是:考虑创建一个或多个视图来显示这个“事物”的当前状态。

显然,这是非常简单的,但这才是重点。

当您扩展应用程序的范围并改进您需要处理的行为时,您可以继续问同样的问题。

我还发现保持一些严格的边界以帮助保持松散耦合和单一目的也是有用的:

1)仅通过控制器操纵视图。

2)不要将模型对象与视图耦合。

3)不要将模型对象与控制器耦合,而是使用接口。

3) (数据读取)只更新服务层的模型数据。

4) (数据写入)如果必须从用户输入向模型写入数据并将其持久化,则必须确定一致的方法并坚持下去。

5)每件事都需要沟通,所以决定一种一致的方法并坚持下去。

正如我所说的,这都是相当主观的,而且只是对事物的一种看法。我不认为每个人都会同意我的观点,但希望这能帮助你做出一些决定。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/350857

复制
相关文章
yii2 在控制器中验证请求参数的使用方法
针对每个请求单独写个Model , 定义验证规则并进行验证。 缺点:写好多参数验证的Model 类。
用户7353560
2021/11/07
3.7K0
Matlab中弧度转角度、角度转弧度
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148429.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/02
1.5K0
Matlab中弧度转角度、角度转弧度
在 ASP.NET MVC 中使用异步控制器
可以通过 AsyncController 类编写异步操作方法。 可以对长时间运行的、非 CPU 绑定的请求使用异步操作方法。 这样可避免在处理请求时阻塞 Web 服务器执行工作。 AsyncController 类通常用于长时间运行的 Web 服务调用。 本主题包含以下各节: 线程池处理请求的方式 处理异步请求 选择同步操作方法或异步操作方法 将同步操作方法转换为异步操作方法 并行执行多个操作 将特性添加到异步操作方法 使用 BeginMethod/EndMethod 模式 类参考 与本主题对应的包含源代码
逸鹏
2018/04/10
1.9K0
使用Kubernetes设备插件和RuntimeClass在入口控制器中实现硬件加速SSL/TLS终止
Kubernetes入口(Ingress)是一种将集群服务连接到集群外部的方法。为了正确地将流量路由到服务后端,集群需要一个入口控制器。Ingress控制器负责根据Ingress API对象的信息为后端设置正确的目的地。实际流量通过代理服务器路由,代理服务器负责诸如负载平衡和SSL/TLS(稍后的“SSL”指SSL或TLS)终止等任务。由于涉及加密操作,SSL终止是一个CPU密集型操作。为了从CPU中卸载一些CPU密集型工作,基于OpenSSL的代理服务器可以利用OpenSSL引擎API和专用加密硬件的优势。这将为其他事情释放CPU周期,并提高代理服务器的总体吞吐量。
CNCF
2019/12/04
1.3K0
使用Kubernetes设备插件和RuntimeClass在入口控制器中实现硬件加速SSL/TLS终止
在微控制器和物联网上使用JavaScript:SSL / TLS
在今天的这篇文章中,我们回到Particle Photon上来解决他的一个最大的缺点:缺少TLS支持,接下来我们将详细介绍如何添加这一功能。
未来守护者
2018/04/20
3.6K13
在微控制器和物联网上使用JavaScript:SSL / TLS
游戏开发中的数据表示
通过IDL语言去定义一个.PROTO文件,然后PROTOBUF会对各个平台提供PROTO C这么一个编译器,然后PROTO C编译器我们可以指定我要生成对应的C#的DR的表示还是对应的C++的DR表示。
Zoctopus
2018/08/10
1.9K0
游戏开发中的数据表示
使用 CVE-2021-43893 在域控制器上删除文件
2021 年 12 月 14 日,在Log4Shell混乱期间,微软发布了CVE-2021-43893,这是一个影响 Windows 加密文件系统 (EFS) 的远程提权漏洞。该漏洞归功于Google Project Zero的James Forshaw,但可能是由于 Log4Shell 的氛围,该漏洞几乎没有引起注意。
Khan安全团队
2022/02/15
1.5K0
Layui 数据表格方法渲染中的复杂表头简单使用示例
{ "code": 0, "msg": "用户信息", "count": 5, "data":[ { "id": 1, "name": "张三", "sex": "女", "prov": "河南", "city": "郑州市", "dist": "金水区" }, { "id": 2, "name": "李四", "sex": "男", "prov": "河南", "city": "郑州市", "dist": "金水区" }, { "id": 3, "name": "王五", "sex": "女", "prov": "河南", "city": "郑州市", "dist": "二七区" }, { "id": 4, "name": "赵六", "sex": "女", "prov": "河南", "city": "开封市", "dist": "龙亭区" }, { "id": 5, "name": "小七", "sex": "男", "prov": "河南", "city": "开封市", "dist": "鼓楼区" } ] }
很酷的站长
2023/02/16
2K0
Layui 数据表格方法渲染中的复杂表头简单使用示例
使用VBA创建Access数据表
导读: 本期介绍如何在Access数据库中创建一张空数据表。下期将介绍如何将工作表中的数据存入数据库对应的表中,随后还将介绍如何从数据库的表中取出数据输出到Excel工作表中,以及如何在导入一个文本文件时(如信贷台账.csv),自动建立数据库,创建表,并将记录导入到数据库表中,完成Excel与Access的完美交互。 演示: 在下面的演示中,运行代码后,你将看到,在数据库中,创建了一张名为的空表,有4个字段。 代码: Code: Option Explicit '需手动在VBE窗口,工具-引用 Mi
企鹅号小编
2018/01/25
5.5K0
Git版本控制器使用
版本控制器 """ 完成 协同开发 项目,帮助程序员整合代码 软件:SVN 、 GIT git:集群化、多分支 """ git 简介 """ 什么是git:版本控制器 - 控制的对象是开发的项目代码 代码开发时间轴:需求1 > 版本库1 > 需求2 > 版本库2 > 版本库1 > 版本库2 """ git使用 安装 # 1.下载对应版本:https://git-scm.com/download # 2.安装git:在选取安装路径的下一步选取 Use a TrueType font in all co
GeminiMp
2020/01/15
4300
Git版本控制器使用
Python在SQLite数据库中动态创建数据表的思路与实现
在管理信息系统或者动态网站开发时,离不开数据库的使用。以SQLite数据库为例,系统运行时要求数据库和对应的数据表已存在,一种方案是提前建好数据库和所有表,再一种方案是系统初始化时自动创建数据库或者相应的数据表。本文介绍第二种方法的思路和实现,自动测试数据库中是否存在某个表,如果不存在就创建。对于SQLite数据库来说,关键是系统表sqlite_master,这个表中记录了所有用户表的信息。例如:
Python小屋屋主
2018/12/26
4.7K0
DC电源模块在工业控制器中的重要性
DC电源模块在工业控制器中起着非常重要的作用,它是实现工业控制器运转所必需的组成部分。
河北稳控科技
2023/08/10
1770
DC电源模块在工业控制器中的重要性
eos源码赏析(十九):EOS智能合约之合约中数据表中RAM的使用
上周eos更新版本至1.2.4,其中修复了ram使用权限的相关缺陷。当时在开发者群内也引发了一些讨论。那么我们今天来看看最新的版本在ram使用权限上到底做了哪些改动呢。涉及到权限的问题自然都是很严重的问题,因为它关乎到用户的资金安全,恰如这次关于ram的使用。
用户2569546
2021/11/23
6830
php中Laravel控制器详解
Laravel中的请求使用的是symfony/http-foundation组件,请求里面放了$_GET,$_POST,$_COOKIE,$_FILES,$_SERVER等数据。
IT工作者
2022/04/16
2.2K0
【Laravel系列3.4】中间件在路由与控制器中的应用
中间件是什么?在传统框架的年代,很少会有中间件这个概念。我最早接触这个概念其实是在学习 MySQL 的时候,了解过 MyCat 这类的组件也被称为中间件。既然是中间,那么它就是一个夹在应用和调用中间的东西。我们还是以请求为例,一个请求要经过接收、处理、返回这三个过程,而中间件,就可以看作是夹在这三个操作中间的一些操作。比如说,我们的请求发过来,在没有到达路由或者控制器的时候,就可以通过中间件做一些预判,像参数合法不合法、登录状态的判断之类的。就像我们用 Laravel 做业务开发的时候,经常需要自己写的的中间件就是处理登录信息和解决跨域问题的中间件(Laravel8有自己的跨域组件了)。
硬核项目经理
2023/03/03
2.6K0
【Laravel系列3.4】中间件在路由与控制器中的应用
使用PHP脚本创建MySQL 数据表
通过 mysql> 命令窗口可以很简单的创建MySQL数据表。你可以使用 SQL 语句 CREATE TABLE 来创建数据表。
用户9239730
2021/11/29
3K0
C++中fstream_在使用中
C++中处理文件类似于处理标准输入和标准输出。类ifstream、ofstream和fstream分别从类 istream、ostream和iostream派生而来。作为派生的类,它们继承了插入和提取运算符(以及其他成员函数),还有与文件一起使用的成员和构造函数。可将文件<fstream> 包括进来以使用任何fstream。如果只执行输入,使用ifstream类;如果只执行输出,使用 ofstream类;如果要对流执行输入和输出,使用fstream类。可以将文件名称用作构造函数参数。
全栈程序员站长
2022/10/02
5.5K0
C++中fstream_在使用中
在命令提示窗口中删除数据表
MySQL中删除数据表是非常容易操作的,但是你在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。
用户4988376
2021/08/17
6420
Sequence在Oracle中的使用
  Oracle中,当需要建立一个自增字段时,需要用到sequence。sequence也可以在mysql中使用,但是有些差别,日后再补充,先把oracle中sequence的基本使用总结一下,方便日后查阅。
庞小明
2018/08/01
5.3K0
点击加载更多

相似问题

使用dtOptions访问angularjs数据表中的json数据

11

角度数据表dtOptions仅在第二次单击时更新

112

不使用dtColumns和dtOptions的angularjs数据表

10

在控制器中角度使用$cacheFactory数据

20

在angular2中使用角度材料数据表

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文