Oop 如何在整个应用程序中将数据库对象现代化为关联数组
我是一个相对较新的程序员,所以我希望使用正确的术语;如果有什么不清楚的,请一定告诉我。在一个非常大的遗留应用程序中,我们有一个Oop 如何在整个应用程序中将数据库对象现代化为关联数组,oop,architecture,Oop,Architecture,我是一个相对较新的程序员,所以我希望使用正确的术语;如果有什么不清楚的,请一定告诉我。在一个非常大的遗留应用程序中,我们有一个用户数据库: users id type name 1 3 Jeff 2 2 Holly 3 4 Tyler 在大多数应用程序中,用户的信息都是以关联数组的形式获取的。我们碰巧使用php,但我认为这个问题适用于任何语言 问题 在整个应用程序中,我们有成百上千的
用户
数据库:
users
id type name
1 3 Jeff
2 2 Holly
3 4 Tyler
在大多数应用程序中,用户的信息都是以关联数组的形式获取的。我们碰巧使用php,但我认为这个问题适用于任何语言
问题
在整个应用程序中,我们有成百上千的用户从用户
获取一行作为关联数组,$user['type']
,并使用它来执行一些业务逻辑;现在我们想对类型
的工作方式进行更改,甚至很难找到该字段使用的所有位置。“类型”一词用于注释、其他变量等
问题
这是OOP的原因之一吗?OOP是我们的主要解决方案,不会引起更多的问题/解决问题,还是有其他方法?似乎如果我们没有关联数组,而是有一个用户对象,正在执行一个
$type=$user->getType()代码>使用IDE查找->getType()
抽象解决了这类问题,这将更容易。例如,假设用户被定义为具有用户名和电子邮件地址,这两种数据类型都是“string”。如果这两个属性在其赋值中被意外切换,编译器将不会拒绝这一点,并且产生的错误只会在应用程序运行时出现
但是,如果用户名和电子邮件地址分别抽象为“用户名”和“电子邮件地址”,则必须为编译器分配正确类型的值才能接受代码
抽象可以在除OO之外的编程范式中完成,但通常OO更适合它,因为抽象概念基本上是从对象的角度来思考的
至于您的特殊情况,它也通过抽象来解决。与使用表示用户的“值数组”不同,您将使用用户的抽象,实现为具有“id”属性、“type”属性和“name”属性的类“user”。当您传递该抽象(或对象,在OOP语言中实现时),它所表示的内容及其物理定义(即int类型的'id',int类型的'type',string类型的'name')没有歧义
有人说强类型可以解决这个问题,但如果不强制执行抽象,则不一定如此。回想一下颠倒用户名和电子邮件地址的例子:即使编译器强制检查用户名是字符串,电子邮件地址是字符串,它仍然无法检测到您在分配其值时是否已切换了这两个值
也有人说只有面向对象语言才能解决这个问题。同样,这是不正确的:只要语言支持抽象,程序员投入工作,问题就可以避免。例如,C中的struct
可以做到这一点——这也是可以用非OOP语言实现OOP的论点
说了所有这些之后,在实践中,您将权衡您需要的抽象程度与实现抽象所需的努力的好处。例如,对于上面的示例,不一定要抽象用户名和电子邮件地址,因为现代IDE提供了足够的提示来帮助减少此类潜在错误