小编use*_*928的帖子

ActiveRecord的大型应用设计问题

在大多数框架中,您具有表示数据库中的行的模型类.

例如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同类?

php oop design-patterns laravel eloquent

8
推荐指数
1
解决办法
248
查看次数

游戏中最短路径(星际争霸的例子)

在像星际争霸这样的游戏中,你可以在地图中拥有多达200个单位(适用于玩家).

有小而大的地图.

例如,当您抓住50个单位并告诉他们去地图的另一侧时,一些算法会启动,他们会找到通过obsticles(河流,山丘,岩石等)的路径.

我的问题是你知道游戏如何减速因为你有50条路径可以计算.与此同时,其他的事情发生像收集矿物质的无人机制造等等.如果地图很大,它应该更难,更慢.

所以即使算法很好,也需要100个单位的时间.

你知道这是如何工作的可能算法类似于其他游戏.

正如我所说,当你告诉单位移动你没有看到计算路径的任何延迟 - 他们立即开始跑到目的地.

问题是他们如何使单位通过最短的路径,但速度很快.

大多数游戏都没有延迟(星际争霸,魔兽争霸等)

谢谢.

path starcraftgym

7
推荐指数
1
解决办法
242
查看次数

没有 OOP 类的 Javascript 多态性

在 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,但无论如何。 …

javascript functional-programming

2
推荐指数
1
解决办法
1087
查看次数

PHP get values by given keys

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

php arrays

1
推荐指数
1
解决办法
55
查看次数

Haskell List函数

我想知道为什么在Haskell中某些函数名称没有对称性:

例如:

  • head :获取第一个元素

  • last :获取最后一个元素

是否有充分的理由说明为什么head函数未命名first,或者反之,last函数可以命名end或类似名称。

haskell

1
推荐指数
1
解决办法
234
查看次数

Haskell类型类

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

-2
推荐指数
1
解决办法
117
查看次数

为什么Haskell有类和继承

Haskell的定义是函数式编程语言.

那么为什么在Haskell中有类和继承.

是不是OOP和FP同时这样?

如何使用函数式编程在Haskell或Javascript中创建多态性.

haskell

-3
推荐指数
1
解决办法
183
查看次数