在大多数框架中,您具有表示数据库中的行的模型类.
例如php代码:
class User extends Model {}
Run Code Online (Sandbox Code Playgroud)
我正在给Laravel雄辩的例子,但对大多数php框架来说都是如此.
然后在类中添加关系:
public function pictures()
{
return $this->hasMany('App\Picture');
}
Run Code Online (Sandbox Code Playgroud)
然后你添加一些像这样的方法:
public function deleteComments()
{
// delete comments code here
}
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是:这是一个好的设计架构,因为在项目变大之后,你会有很多关系(图片,评论,帖子,订阅等等与用户相关联).这个类可能会变成10k行代码.
在这种情况下,课程将变得非常庞大且难以维护.也可能违反了单一责任原则,因为你在一个班级中有太多的方法.
此外,如果我想在另一个应用程序中使用它,我不能,因为我将不得不在第二个应用程序(网站)中提取图片,评论等.
如果我创建其他类" UserPictures"," UserPictureDeleter"代码会变得更复杂.
这是一个好的做法,如果没有,你有什么建议,如何使代码不会膨胀这么多的方法,但易于使用.你是否同意所有这些方法属于User同类?
在像星际争霸这样的游戏中,你可以在地图中拥有多达200个单位(适用于玩家).
有小而大的地图.
例如,当您抓住50个单位并告诉他们去地图的另一侧时,一些算法会启动,他们会找到通过obsticles(河流,山丘,岩石等)的路径.
我的问题是你知道游戏如何减速因为你有50条路径可以计算.与此同时,其他的事情发生像收集矿物质的无人机制造等等.如果地图很大,它应该更难,更慢.
所以即使算法很好,也需要100个单位的时间.
你知道这是如何工作的可能算法类似于其他游戏.
正如我所说,当你告诉单位移动你没有看到计算路径的任何延迟 - 他们立即开始跑到目的地.
问题是他们如何使单位通过最短的路径,但速度很快.
大多数游戏都没有延迟(星际争霸,魔兽争霸等)
谢谢.
在 JS 或 OOP 语言中,多态性是通过创建不同的类型来创建的。
例如:
class Field {...}
class DropdownField extends Field {
getValue() {
//implementation ....
}
}
Run Code Online (Sandbox Code Playgroud)
想象一下,我有一些方法的库 forms.js:
class Forms {
getFieldsValues() {
let values = [];
for (let f of this.fields) {
values.push(f.getValue());
}
return values;
}
}
Run Code Online (Sandbox Code Playgroud)
这将获取所有字段值。请注意,库并不关心它是什么字段。
这样,开发人员 A 创建了库,开发人员 B 可以创建新字段:AutocompleterField。
他可以在 AutocompleterField 中添加方法而无需更改库代码 (Forms.js)。
如果我在 JS 中使用函数式编程方法,我该如何实现?
如果我在对象中没有方法,我可以使用 case 语句,但这违反了原则。与此类似:
if (field.type == 'DropdownField')...
else if (field.type == 'Autocompleter')..
Run Code Online (Sandbox Code Playgroud)
如果开发人员 B 添加新类型,他应该更改库代码。
那么有没有什么好的方法可以在不使用面向对象编程的情况下解决 javascript 中的问题。
我知道 Js 不完全是 OOP 或 FP,但无论如何。 …
I have array like this:
$user = [
'id' => 1,
'fname' => 'name1',
'lname' => 'lname',
'age' => 20
];
Run Code Online (Sandbox Code Playgroud)
I want to get values by given keys. Is there function already.
$userData = array....($user, ['fname', 'lname']); // get only fname and lname from user
Run Code Online (Sandbox Code Playgroud)
I dont want to to for loops or similar.
Thanks
我想知道为什么在Haskell中某些函数名称没有对称性:
例如:
head :获取第一个元素
last :获取最后一个元素
是否有充分的理由说明为什么head函数未命名first,或者反之,last函数可以命名end或类似名称。
haskell类型与常规PHP类的不同之处.
如果我禁用扩展,我可以在PHP或JavaScript中模拟类似的东西.
哈斯克尔:
data Person = Person { firstName :: String
, lastName :: String
, age :: Int
, height :: Float
, phoneNumber :: String
, flavor :: String
age :: Person -> Int
age (Person p) = p.age
newAge = age(Person {age:=35})
Run Code Online (Sandbox Code Playgroud)
JS:
class Person {
constructor(data) {
this.data = data
}
}
function age(p) {
if (p instanceof Person) return p.age
}
let personAge = age(new Person({age: 35})); // 35
Run Code Online (Sandbox Code Playgroud)
可能存在语法错误但忽略它们.
简而言之,如果我不使用继承,js代码类似于Haskell.
我没有模式匹配,但我可以使用"if instanceof"来检查类型.
Haskell的定义是函数式编程语言.
那么为什么在Haskell中有类和继承.
是不是OOP和FP同时这样?
如何使用函数式编程在Haskell或Javascript中创建多态性.
haskell ×3
php ×2
arrays ×1
eloquent ×1
javascript ×1
laravel ×1
oop ×1
path ×1
starcraftgym ×1