标签: factory

Exception工厂的价值是什么?

在查看从WCF库反映的一些代码时,我看到了用于创建异常的模式:

if(argument == null)
{
    throw Error.ArgumentNull("argument");
}
Run Code Online (Sandbox Code Playgroud)

空参数是最简单的示例,其他类型的异常可通过静态错误类获得.

这种工厂模式的价值是多少?为什么不使用new运算符并简单地调用ArgumentNullException构造函数?

.net factory exception

6
推荐指数
2
解决办法
914
查看次数

在Ninject中使用ToFactory时的ActivationException

当我尝试在Ninject中使用ToFactory时,我得到Ninject.ActivationException

var test = new StandardKernel();
test.Bind<IFoo>().To<Foo>();
test.Bind<IFooFactory>().ToFactory();
var factory = test.Get<IFooFactory>();
var foo = factory.GetFoo();           //<--Ninject.ActivationException
Run Code Online (Sandbox Code Playgroud)

工厂:

public interface IFooFactory
{
    IFoo GetFoo();
}
Run Code Online (Sandbox Code Playgroud)

例外:

Ninject.ActivationException was unhandled
  Message=Error activating IFoo
No matching bindings are available, and the type is not self-bindable.
Activation path:
  1) Request for IFoo

Suggestions:
  1) Ensure that you have defined a binding for IFoo.
  2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
  3) …
Run Code Online (Sandbox Code Playgroud)

c# factory ninject ninject-extensions

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

DDD 工厂实体值对象

在我当前的项目中,我越来越多地采用 DDD/洋葱架构。我仍然不清楚的许多事情之一是应该有多少封装。用一个具体的例子更容易解释。

例子

namespace MyProject.Model
{
    public class ComplexEntity
    {
        private int _id;
        public int Id { get {return _id;} }
        public ValueObjectA ValueA {get; set;}
        public bool IsBool {get; set;}
        public ComplexEntity(ValueObjectA a, bool isBool)
        {
            // Do some validation first
            ValueA = a;
            ValueB = b;
            IsBool = isBool;
        }
    }

    public class ValueObjectA
    {
        public bool IsBoolA {get; private set;}
        public bool IsBoolB {get; private set;}
        public ValueObjectA(bool a, bool b)
        {
            IsBoolA = a;
            IsBoolB = …
Run Code Online (Sandbox Code Playgroud)

c# domain-driven-design factory onion-architecture

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

是否可以使用 Dart 执行静态代码?

Java 和 Javascript 都允许以不同的方式执行静态代码。Java 允许您在类的主体中包含静态代码,而 JS 允许您在类定义之外执行静态代码。例子:

爪哇:

public class MyClass {
    private static Map<String,String> someMap = new HashMap<String,String();
    static {
        someMap.put("key1","value");
        someMap.put("key2","value");
        SomeOtherClass.someOtherStaticMethod();
        System.out.println(someMap);
    }
}
Run Code Online (Sandbox Code Playgroud)

JS(基本上是类之外的任何 JS 代码):

var myint = 5;
callSomeMethod();
$(document).ready(function () {
    $("#hiddenelement").hide();
});
Run Code Online (Sandbox Code Playgroud)

但是,Dart 似乎支持两种方式中的任何一种。支持声明全局变量和方法,但不支持像在 JS 中那样调用方法和执行代码。这只能在一个main()方法中完成。此外,类中的静态代码也是不允许的。

我知道 Dart 有其他方法可以像我的第一个示例一样静态填充 Map,但是我可以想到另一种情况需要这样做。

让我们考虑以下CarRegistry实现,它允许您将汽车模型的字符串映射到相应类的实例。从 JSON 数据中获取汽车模型时的 Fe:

class CarRegistry {
    static Map<String, Function> _factoryMethods = new HashMap<String, Function>();

    static void registerFactory(String key, Car factory()) {
        _factoryMethods[key] = factory;
    }

    static Car …
Run Code Online (Sandbox Code Playgroud)

static factory dart

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

模型工厂与现有模型的关联

我的 Laravel 5.2 应用程序具有以下结构:

用户: id 姓名...

帖子:id 标题正文 user_id (fk)

评论:id body user_id (fk) post_id (fk)

我想创建几个用户(20),为每个用户创建随机数量的帖子,并为每个帖子创建随机数量的评论(即使是固定数量也可以)。

我可以创建用户并为每个用户分配帖子,但我无法为每个帖子分配评论:我有这个:

factory(App\User::class, 20)->create()->each(function($u) {
   $u->posts()->saveMany(factory(App\Post::class, 5)->make();
});
Run Code Online (Sandbox Code Playgroud)

我发现了一些东西但没有用:

factory(App\Comment::class, 100)->create()->each(function($u) {
   $u->user()->sync(
      App\User::all()->random(3)
   );
});
Run Code Online (Sandbox Code Playgroud)

注意:我在模型之间建立了这样的关系:用户有很多帖子,用户有很多评论,帖子有很多评论,评论属于帖子,评论属于用户

php factory model laravel

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

Enum将工厂称为Java内部Enum

我试图将Enum样式的工厂模式实现为内部枚举,但它不起作用.有没有将内部枚举分离成新文件的解决方案?换句话说,内部Enum风格的工厂模式是否可能?

代码如下.

public class SampleParent {

    private class InnerChild { }
    private class InnerChildA extends InnerChild { }
    private class InnerChildB extends InnerChild { }
    private class InnerChildC extends InnerChild { }

    enum InnerChildEnum {
        CHILD_A {
            @Override
                public InnerChild getInstance() {
                    return new InnerChildA();  // compile error
                }
        },
        CHILD_B {
            @Override
                public InnerChild getInstance() {
                    return new SampleParent.InnerChildB();  // compile error
                }
        },
        CHILD_C {
            @Override
                public InnerChild getInstance() {
                    return SampleParent.new InnerChildC();  // compile error
                }
        }, …
Run Code Online (Sandbox Code Playgroud)

java enums factory

6
推荐指数
2
解决办法
238
查看次数

带有使用不同参数的构造函数的 Java 简单工厂

我有两种在我的应用程序中保存数据的方法:保存到数据库和保存到文件。由于我不希望客户端代码处理对象的构造,因此我创建了一个类(据我所知)是带有工厂方法的简单工厂。代码如下:

public static DataPersister createDataPersister(Boolean saveToDb, Session session, String filename) {
    if (saveToDb) {
        return new DatabaseDataPersister(session);
    } else {
        return new FileDataPersister(filename);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此设置,客户端代码不必处理构建任何内容或决定是否保存到数据库或文件 - 它只需调用save()工厂返回的对象上的方法,如下所示:

DataPersister dataPersister = DataPersisterSimpleFactory.createDataPersister(this.savetoDb, this.session, this.filename);
dataPersister.save(this.data);
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 这个解决方案是否违反了 SOLID 原则?例如,为了创建一个DatabaseDataPersister客户端代码需要传递一个filename参数,并且这个实现DataPersister不会使用它。我觉得它与类似于接口隔离原则的东西并不相符,但并非如此。

如果解决方案确实是代码异味 - 我该如何清理它?

java oop design-patterns factory solid-principles

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

如何在 Laravel 中填充数据透视表?

我为帖子和类别编写了工厂,工作非常完美。但我找不到一种方法来填充category_post 表来测试它们之间的ManyToMany 关系。

我怎样才能做到这一点?

php factory pivot-table seed laravel

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

工厂男孩 - 如何创建工厂所需的数据(预生成挂钩)

注意:我将尝试用简化的场景来解释用例(这对您来说可能看起来很奇怪)。

我有 2 个模型(相关但没有外键):

# models.py
class User(models.Model):
    name = models.CharField()
    age = models.IntegerField()
    weight = models.IntegerField()
    # there are a lot more properties ... 

class Group(models.Model):
    name = models.CharField()
    summary = JSONField()

    def save(self, *args, **kwargs):
        self.summary = _update_summary()
        super().save(*args, **kwargs)
    def _update_summary(self):
        return calculate_group_summary(self.summary)

# this helper function is located in a helper file
def calculate_group_summary(group_summary):
   """calculates group.summary data based on group.users"""
   # retrieve users, iterate over them, calculate data and store results in group_summary object
   return group_summary …
Run Code Online (Sandbox Code Playgroud)

python django unit-testing factory factory-boy

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

求使列表中元素总和减半的最小步骤数,其中每一步将列表中的一个项目减半,时间复​​杂度为 O(N)

我遇到过一个面试问题,是这样的:

某个地区有一些工厂会产生污染气体,每个工厂都要安装过滤器以减少污染。每安装一个过滤器就会使该工厂的污染减少一半。每个工厂可以有多个过滤器。有一个包含 N 个整数的列表,代表该地区 N 个工厂中每个工厂的污染程度。求出将总体污染减半所需的最少过滤器数量。

例如 - 让 [3, 5, 6, 1, 18] 成为 5 个工厂的污染级别列表

  • 总体污染=3+5+6+1+18=33(目标是33/2=16.5)

  • 在工厂安装一个过滤器,索引=4 --> 污染级别将为 [3, 5, 6, 1, 9]

  • 在工厂安装一个过滤器,索引=4 --> 污染级别将为 [3, 5, 6, 1, 4.5]

  • 在工厂安装一个过滤器,索引=2 --> 污染级别将为 [3, 5, 3, 1, 4.5]

  • 至少需要 3 个过滤器才能将总体污染减少一半。

N 是 [1...30,000] 范围内的整数。列表中的每个元素都是 [0....70,000] 范围内的整数

我为此想出的解决方案很简单:每次查找列表中的最大值和一半,直到总和<=目标

def solution(A):
    total = sum(A)
    target = total/2
    count = 0
    while total>target:
        count+=1
        max_p = max(A)
        total-= max_p/2
        A.remove(max_p)
        A.append(max_p/2)
    return count
Run Code Online (Sandbox Code Playgroud)

这很有效,只是时间复杂度似乎是 O(N^2)。有人可以建议一种时间复杂度较低(最好是 O(N))的方法来解决这个问题吗?

python algorithm factory time-complexity data-structures

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