Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 前端后端类交换_Php_Angular_Oop - Fatal编程技术网

Php 前端后端类交换

Php 前端后端类交换,php,angular,oop,Php,Angular,Oop,我正在使用Angular2和PHP(主要是RESTAPI)编写应用程序。问题是,angular和php的类几乎相同。例如,在php中,我有一个类契约,其中包含一些字段,如title、description、provider。我还有api端点getContract()返回所有这些字段。我在angular中有相同的类,所以我可以在这里添加一些逻辑,比如getter和setter。每次写两个类似的类真让我恼火,如果我需要改变什么,我必须改变两次。但现在我有了一个新的需求,用API创建独立的项目,所以用

我正在使用Angular2和PHP(主要是RESTAPI)编写应用程序。问题是,angular和php的类几乎相同。例如,在php中,我有一个类契约,其中包含一些字段,如title、description、provider。我还有api端点getContract()返回所有这些字段。我在angular中有相同的类,所以我可以在这里添加一些逻辑,比如getter和setter。每次写两个类似的类真让我恼火,如果我需要改变什么,我必须改变两次。但现在我有了一个新的需求,用API创建独立的项目,所以用两个词来说,现在我每次必须创建3个类


所以,如果问题很清楚,我想谈谈可能的解决方案,在谷歌搜索了一段时间后,我什么也没找到,现在我已经迈出了第一步,希望有人能把我带向正确的方向。那里的最佳实践是什么?可以用json存储类,然后用angular和php解析?感谢您的建议

我的意思是完全尊重您-如果您在编写两个不同的类时遇到问题,一个用于Angular,另一个用于后端,那么您不应该使用Angular

Angular是一个单页应用程序框架。这是一种构建web应用程序的不同技术,通过这种技术,您可以将用户界面构建为Javascript/Typescript中的独立应用程序。然后,该应用程序通过HTTP(在某些情况下是web套接字)与单独的服务器端应用程序通信

因此,根据定义,您将有两个应用程序。有些人(包括我自己)以多种方式组合这些应用程序以简化部署/源代码管理,但这只是为了方便起见,并且充分理解这两个应用程序仍然是独立的实体

如果必须为前端和后端应用程序创建类似命名的类的想法太痛苦了,那么老实说,我会坚持使用普通的web应用程序,其中用户界面直接由服务器应用程序提供,并根据需要使用javascript来增强用户界面。(该用例非常不适合AngularJS,即Angular1,可能,但绝对不是Angular版本2和更高版本)

一些重复的感觉代码在意义上不是重复的。 换句话说,如果您必须在每个模型上花费额外的10分钟,将字段从一个具有一种职责的类复制到另一个具有另一种职责的类,可能使用不同的语言,这是相当标准的。没关系。而且,这不是徒劳的重复。

前端类和后端类可能几乎完全相同;但是,它们做不同的事情。它们共享字段的事实几乎是巧合,而且不能保证。在某些应用程序中,客户机和服务器模型可能会有很大差异

而且,值得注意的是,在许多框架中,重复比您想象的还要糟糕!如果将域中的服务器模型与DTO分离,则很容易得到2到4个“完全相同”的服务器模型。而且,一些MVC客户机框架会导致类似的重复代码。(或者,您没有意识到模板是另一种语法截然不同的模型枚举吗?)

。。。最终,一个真正健壮的应用程序可能最终会有4到6个或更多底层模型的翻译

自动生成模型/代码不是免费的。 假设所有对应的前端和后端类基本上是“相同的”。花5分钟将字段从一种语法复制到另一种语法肯定会觉得很愚蠢,但如果你最终花一个月的时间想出一个解决方案来为每个项目节省一个小时,你的同事会认为你更愚蠢

当您的解决方案中断时,您也会感到非常沮丧,当代码生成器执行意外操作时,您会“不时”花费额外的一两个小时

即使你找到一个现成的解决方案,你只有安装,有时间投入。有一个学习曲线。会有维修。A将出现意想不到的问题

从长远来看,你可能会节省时间;但是,你需要做数学运算

也就是说,有很多选择。
  • 你可以找到一个运输工具。比如,或者,或者
  • 您可以从JSON、XML或任何您喜欢的格式加载JS/PHP中的基本模型,并附加逻辑
  • 您可以从JSON、XML或任何您喜欢的格式生成基本JS/PHP
  • 您可以动态生成基本客户机模型。也就是说,只需使用服务器响应作为基本模型,并向其附加客户机方法
  • 您可以动态生成基本服务器模型。也就是说,在可能的情况下,您的服务器就像哑存储器一样工作。也许它知道谁拥有什么。。。但没有更多。(只需确保服务器模型对于用户之间传递的对象是“智能的”。)
  • 你可以为切换到nodejs提供理由
也许你会在晚上睡得更好花更多的时间来避免任何形式的重复。也许你会觉得你的测试套件不需要那么大。或者别的什么

如果是这样的话,那就去做吧


但是,你所指的重复并不一定是徒劳或不正常的。客户端模型和服务器模型应该做不同的事情,即使它们看起来和感觉像是彼此徒劳的重复。

最好的解决方案是切换到NodeJ,这样您就可以在前端和后端为简单数据对象保留相同的类。将类存储在JSON中听起来像是一个可怕的解决方案,最终导致了漫长而痛苦的调试时间。无论如何,您将无法在PHP和JS之间共享代码。还要注意的是,即使使用同一种语言,为不同的平台开发(浏览器+angular vs nodejs+express或其他任何平台)也是一个巨大的挑战