首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel - Solid原理

Laravel - Solid原理
EN

Stack Overflow用户
提问于 2019-02-04 13:48:42
回答 3查看 4.4K关注 0票数 5

我想问你关于Laravel中的可靠原则,特别是关于接口分离原则。

假设我们有一个用户可以发送订单的应用程序。但对于每个用户,我们都有不同的发送订单的方式。例如,用户one -通过电子邮件发送订单。用户2-通过上传到ftp的xml发送订单。按照这种思路,我们可以在php中创建接口:

然后,And为每个特定用户实现它。但在Laravel中,我们只有一个类User。假设用户具有user类型的属性,我们可以从中找到sendOrder类型。在Laravel中做这件事最好的方法是什么?也许是一个开关/if来查找并返回正确的实现,或者有更好的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-04 14:25:45

这感觉像是策略模式的一个很好的用例。在您的示例中,用户可以有多种发送订单的方式。换句话说,多个策略。这也是考虑将订单逻辑添加到服务层的好时机。

诚然,你的问题有点含糊,但我会试着举一个例子,说明我可能如何完成这项工作。因此,假设您的App\User模型将实现您的接口ISendOrder

您的OrderService的一个非常小的示例如下所示:

这一步纯粹是可选的,但我可能会将订单发送逻辑封装在一个特征中。你的模型会看起来干净多了。此外,您还可以轻松地将此逻辑添加到将来可能发送订单的任何其他models中。

您的特征将如下所示:

这是一个很小的例子,用来说明你是如何做到这一点的。

票数 7
EN

Stack Overflow用户

发布于 2019-02-04 14:26:36

注意主观的问题,比如“什么是最好的方式……”,这个网站是专门针对细节的。但是,关于你的问题,有一些事情可能会有所帮助。

单一响应性:一个类应该只有一个改变的理由。如果您遇到多个类,请将其重构为单独的类。也就是说,不要将“用户”和“消息驱动”的概念融合在同一个类中。

Open Closed:类应该是开放的,可以使用子类进行扩展或重写,但不能在of本身中修改现有方法的输入或输出。也就是说,不要从可能已经在使用该类的东西中拉出地毯。功能测试是确保重构不会意外做到这一点的好方法。

Liskov替换:兄弟类应该是可互换的。你谈到有不同种类的变速器驱动程序。电子邮件与FTP。您的EmailDriver和FtpDriver类都应该实现一个定义send()方法的接口。因此,任何使用其中一种方法的东西也应该能够处理另一种方法。您的Adapter类同时使用要与之通信的User和定义通信机制的Driver,因此不必关心细节。

界面隔离:简而言之,让你的界面保持苗条。如果一个类愿意的话,它总是可以实现多个。如果单个接口要求对象支持太多,而不是实际需要的,可能会导致不必要的复杂性。

依赖倒置:这种方式与Liskov替换密切相关。高级类应该依赖于接口而不是具体的类,以便在需要时以最少的重构更容易地交换组件。

Laravel的Service Container做了很多这方面的工作。服务提供者将具体类绑定到抽象。通常,这些抽象是字符串接口名称,但它们实际上可以是任何字符串。这在一定程度上是门面的工作原理。

Laravel实例化新对象的方式应该总是依赖注入。通过键入提示(如果适用)或使用app()帮助器函数。

当你请求Laravel以这种方式实例化一个对象时,你所做的就是让容器有机会用提供者中定义的类来交换你所请求的类。

不过,回到你的具体问题上,当涉及到指示你的代码为谁利用哪个传输驱动程序时,如果没有更多的信息,我不能肯定,这只是一个观点,但你可能想看看工厂Pattern(https://en.wikipedia.org/wiki/Factory_(object-oriented_programming%29)是否适合你的情况。

票数 1
EN

Stack Overflow用户

发布于 2021-02-27 15:50:38

我写这篇文章是希望能澄清一些人关于接口隔离的概念。

我认为,@mozammil为Laravel的具体情况提供了最好的答案。

但是,如果您对这种接口隔离有清晰的概念,那么在任何编程案例中使用它都同样简单- JavaPHPC#Python或任何编程语言。

接口隔离:

客户端/用户不应该依赖于他们不能使用的接口,而不是将这些接口分离为几个接口。

例如,如果我们这样做,就可以检查一切是否正确。

BankPayment类使用两个与其相关且必要的函数。但是,如果有任何新的东西到来。喜欢需要添加贷款计算和检查。

看看这个,对于LoanPayment类来说一切都很好,但是对于BankPayment类来说,新的两个函数是不必要的,应该在另一个接口中分离出来。

这就是SOLID中的接口隔离原则。

要获得关于SOLID principles的完整概念和现实生活中的实现,您可以查看以下内容- https://devsenv.com/tutorials/solid-principle-in-depth-with-practical-example

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

https://stackoverflow.com/questions/54517534

复制
相关文章
tensorflow版本的tansformer训练IWSLT数据集
代码来源:https://github.com/Kyubyong/transformer
西西嘛呦
2020/08/26
1.9K0
教程 | 如何在TensorFlow中高效使用数据集
选自TowardsDataScience 作者:Francesco Zuppichini 机器之心编译 处理并使用数据集是深度学习任务非常重要的组成部分。在本文中,作者 Francesco Zuppichini 将教你使用 TensorFlow 的内建管道向模型传递数据的方法,从此远离「feed-dict」。本文内容已更新至最新的 TensorFlow 1.5 版本。 相关代码地址:https://github.com/FrancescoSaverioZuppichini/Tensorflow-Datase
机器之心
2018/05/10
1.5K0
在自己的数据集上训练TensorFlow更快的R-CNN对象检测模型
计算机视觉正在彻底改变医学成像。算法正在帮助医生识别可能错过的十分之一的癌症患者。甚至有早期迹象表明胸部扫描可有助于COVID-19的识别,这可能有助于确定哪些患者需要进行实验室检查。
代码医生工作室
2020/03/18
3.6K0
在自己的数据集上训练TensorFlow更快的R-CNN对象检测模型
如何在CDSW上运行TensorFlow
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 前面Fayson也介绍了CDSW的安装及CDSW使用的一些知识,本篇文章主要介绍如何在CDSW平台上运行一个TensorFlow的示例,在学习本章知识前,你需要知道以下知识: 《如何在Windows Server2008搭建DNS服务并配置泛域名解析》 《如何利用Dnsmasq构建小型集群的
企鹅号小编
2018/02/02
1.5K0
如何在CDSW上运行TensorFlow
如何在CDSW上运行TensorFlow
前面Fayson也介绍了CDSW的安装及CDSW使用的一些知识,本篇文章主要介绍如何在CDSW平台上运行一个TensorFlow的示例,在学习本章知识前,你需要知道以下知识:
Fayson
2018/03/29
1.4K0
TensorFlow数据集(二)——数据
参考书 《TensorFlow:实战Google深度学习框架》(第2版) 一个使用数据集进行训练和测试的完整例子。 #!/usr/bin/env python # -*- coding: UTF-8 -*- # coding=utf-8 """ @author: Li Tian @contact: 694317828@qq.com @software: pycharm @file: dataset_test5.py @time: 2019/2/12 13:45 @desc: 使用数据集实现数据输入
py3study
2020/01/17
6090
TensorFlow数据集(一)——数据
参考书 《TensorFlow:实战Google深度学习框架》(第2版) 例子:从一个张量创建一个数据集,遍历这个数据集,并对每个输入输出y = x^2 的值。 #!/usr/bin/env python # -*- coding: UTF-8 -*- # coding=utf-8 """ @author: Li Tian @contact: 694317828@qq.com @software: pycharm @file: dataset_test1.py @time: 2019/2/10 1
py3study
2020/01/17
7640
大型数据集的MySQL优化
诸多知名大公司都在使用MySQL,其中包括Google、Yahoo、NASA和Walmart。此外,其中部分公司的表囊括数十亿行,却又性能极佳。虽然很难保持MySQL数据库高速运行,但面对数据堆积,可以通过一些性能调整,来使其继续工作。本文则将围绕这一问题展开讨论。 导论 设计数据库之前,有必要先了解一下表的使用方法。例如,对于需要频繁更新的数据,最好将其存入一个独立表中,而通过这样的分表,更新操作将更加快捷。同时,表的连接操作也会消耗时间,所以若要深入分析复杂数据,则最好选用大表。惯有认知下,归一化可通过
CSDN技术头条
2018/02/12
1.2K0
如何在 CentOS 8 上安装 TensorFlow
TensorFlow是一个由Google 开发的,关于机器学习的开源平台。它可以在不同设备的 CPU 或者 GPU 上运行,并且它被很多组织所使用,其中包括Twitter, PayPal, Intel, Lenovo, 和 Airbus.
雪梦科技
2020/05/09
1.3K0
如何在 CentOS 8 上安装  TensorFlow
YOLOv8已至,精度大涨!教你如何在自定义数据集上训练它
丰色 发自 凹非寺 量子位 | 公众号 QbitAI 很快啊—— 目标检测经典模型YOLO的第八个版本就已经发布了。 这次升级不少,包括命令行界面、Python API、backbone结构等,精度相比YOLOv5高了一大截(速度官方还没公布)。 下面是网友实测,几个不同规模的变体在目标检测、实例分割和图像分类三项任务上的涨点最高达到了33.21%。 不知道YOLOv8这一出,v5版本还会“苟”多久? oh我们还发现已经有人用它在自定义数据集上完成了一波训练,效果是这样滴: 这精准度和稳定性,让网友狠
量子位
2023/02/28
4K0
YOLOv8已至,精度大涨!教你如何在自定义数据集上训练它
如何在 CentOS 7 上安装 Tensorflow
TensorFlow是一个用于构建机器学习的免费并且开源的平台,它由 Google 开发。它被一系列组织包括 Twitter,PayPal, Intel, Lenovo, 和 Airbus 使用。
雪梦科技
2020/05/11
4K0
如何在 CentOS 7 上安装 Tensorflow
tensorflow object detection API训练公开数据集Oxford-IIIT Pets Dataset
object detection API 安装参见官方的github: https://github.com/tensorflow/models/tree/master/research/object_detection
OpenCV学堂
2018/09/29
1.5K0
tensorflow object detection API训练公开数据集Oxford-IIIT Pets Dataset
TensorFlow 组合训练数据(batching)
摘要总结:本文主要介绍了使用TensorFlow从TFRecord文件中读取数据,并将其组合成batch进行训练的过程。首先介绍了TensorFlow和TFRecord的基本概念,然后详细讲解了从TFRecord文件中读取数据的过程,包括使用TensorFlow的队列和线程进行数据读取和组合成batch的过程。最后通过一个例子演示了如何使用TensorFlow读取和组合成batch进行训练的过程。
chaibubble
2018/01/02
2K0
TensorFlow 组合训练数据(batching)
mask rcnn训练自己的数据集_fasterrcnn训练自己的数据集
这篇博客是 基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)文章中 数据集的制作 这部分的一些补充
全栈程序员站长
2022/09/23
8280
mask rcnn训练自己的数据集_fasterrcnn训练自己的数据集
在C#下使用TensorFlow.NET训练自己的数据集
今天,我结合代码来详细介绍如何使用 SciSharp STACK 的 TensorFlow.NET 来训练CNN模型,该模型主要实现 图像的分类 ,可以直接移植该代码在 CPU 或 GPU 下使用,并针对你们自己本地的图像数据集进行训练和推理。TensorFlow.NET是基于 .NET Standard 框架的完整实现的TensorFlow,可以支持 .NET Framework 或 .NET CORE , TensorFlow.NET 为广大.NET开发者提供了完美的机器学习框架选择。
Enjoy233
2021/12/23
1.6K0
在C#下使用TensorFlow.NET训练自己的数据集
教程 | 使用MNIST数据集,在TensorFlow上实现基础LSTM网络
选自GitHub 机器之心编译 参与:刘晓坤、路雪 本文介绍了如何在 TensorFlow 上实现基础 LSTM 网络的详细过程。作者选用了 MNIST 数据集,本文详细介绍了实现过程。 长短期记忆(LSTM)是目前循环神经网络最普遍使用的类型,在处理时间序列数据时使用最为频繁。关于 LSTM 的更加深刻的洞察可以看看这篇优秀的博客:http://colah.github.io/posts/2015-08-Understanding-LSTMs/。 我们的目的 这篇博客的主要目的就是使读者熟悉在 Tenso
机器之心
2018/05/08
1.5K0
教程 | 使用MNIST数据集,在TensorFlow上实现基础LSTM网络
【综述专栏】如何在标注存在错标的数据上训练模型
在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。
马上科普尚尚
2021/04/28
1.3K0
【综述专栏】如何在标注存在错标的数据上训练模型
tensorflow对象检测框架训练VOC数据集常见的两个问题
Tensorflow自从发布了object detection API这套对象检测框架以来,成为很多做图像检测与对象识别开发者手中的神兵利器,因为他不需要写一行代码,就可以帮助开发者训练出一个很好的自定义对象检测器(前提是有很多标注数据)。我之前曾经写过几篇文章详细介绍了tensorflow对象检测框架的安装与使用,感兴趣可以看如下几篇文章!
OpenCV学堂
2019/04/29
2.1K2
tensorflow对象检测框架训练VOC数据集常见的两个问题
数据集的划分--训练集、验证集和测试集
        在机器学习中,经常提到训练集和测试集,验证集似有似无。感觉挺好奇的,就仔细查找了文献。以下谈谈训练集、验证集和测试集。
Flaneur
2020/03/25
5.3K0
点击加载更多

相似问题

不能在简单的数据集上训练Tensorflow

12

内存错误:训练大型数据集

23

使用tensorflow逐步训练数据集

111

如何在Colab中免费训练大型数据集

115

使用大型tensorflow数据集onTPU

122
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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