我想创建一个投票系统,可以对多个域对象进行投票:
所以我想我会Voteable为这些项创建一个接口:
interface Voteable
{
public function vote( User $user, $value );
}
Run Code Online (Sandbox Code Playgroud)
我认为这个vote方法会代理一个存储库方法,例如:
class VotingRepository
{
public function castVote( Voteable $item, User $user, $value )
{
// save the these values, along with the value
$itemId = $item->getId();
$userId = $user->getId();
}
}
Run Code Online (Sandbox Code Playgroud)
目前,存储库将是一个数据库.该数据库将具有每种投票类型的链接表:
因此,这实际上意味着每个域对象都需要另一个表来投票.这对工厂来说是个好人吗?一个VotingRepositoryFactory在这种情况下?换句话说,像:
class VotingRepositoryFactory
{
createVotingRepository( $type )
{
switch( $type )
{
case 'event':
// create a voting repository with EventVote table
return …Run Code Online (Sandbox Code Playgroud) 我有一个组件,需要根据它收到的输入调用特定的服务.因此,我的组件必须查看输入并基于一个配置,该配置说"对于此输入调用,此服务与此数据"需要调用正确的服务.这些服务具有共同的签名方法和特定的签名方法(每个).
我想到了一个包含所有三种方法签名的抽象类.这两个服务的实现将覆盖所有三种方法(抛出NotImplementedException当前服务不支持的方法).可以使用map初始化的组件(每个输入类型将具有要调用的服务的类型)也将被定义.
你有更好的方法来应对这种情况吗?
我想用SQL.factory()上传文件我只想维护我的代码当前的原始文件名
form = SQLFORM.factory(
Field('file_name', requires=IS_NOT_EMPTY()),
Field('file', 'upload',uploadfolder=upload_folder))
if form.accepts(request.vars, session): #.process().accepted:
response.flash = u'File uploaded'
session.your_name = form.vars.file_name
session.filename = request.vars.file
elif form.errors:
response.flash = 'form has errors'
return dict(form=form)
Run Code Online (Sandbox Code Playgroud)
我猜session.filename = request.vars.file是你设置文件名的地方.为什么我得到自动生成的文件名no_data.smth.23u8o8274823zu4i2.smth
谢谢
据我所知,工厂方法是简单工厂,工厂对象是抽象工厂?和:
- 工厂方法(简单工厂):
public class SimplePizzaFactory {
public static final int CHEESE = 1;
public static final int PEPPERONI = 2;
public static final int VEGGIE = 3;
public static Pizza createPizza(int type) {
Pizza pizza = null;
if (type == CHEESE) {
pizza = new CheesePizza();
} else if (type == PEPPERONI ) {
pizza = new PepperoniPizza();
} else if (type == VEGGIE ) {
pizza = new VeggiePizza();
}
return pizza;
}
}
Run Code Online (Sandbox Code Playgroud)
工厂对象(抽象工厂):
?
我对吗?
工厂模式的实现有多少,它们的区别是什么?
我正在设置AngularJS中的配置文件.是否可以在AngularJS中创建一个不能覆盖其密钥的工厂?例如,我可以像这样设置一个不能被覆盖的常量
module.constant('animals',{"cat":"meow","dog":"woof"});
但我想做这样的事情,允许覆盖的值,但不允许工厂本身
module.value('catSound','meow')
.value('dogSound','woof')
.factory('animals', ['catSound','dogSound', function(catSound, dogSound) {
return {
"cat": catSound,
"dog": dogSound
}
});
Run Code Online (Sandbox Code Playgroud)
上面的工厂可以被覆盖,允许另一段代码拥有module.factory('animals',function(){ return 7 })并破坏一切.但是,作为工厂,个别值可以(并且应该)可以覆盖,因此我应该能够分配module.value('catSound','hiss')并使事情仍然按预期工作.
我已经尝试过注入常量,但据我所知,这是不可能的.如何防止我的工厂声明被覆盖?我意识到在描述我想要的东西时,常量可能不是正确的术语,但我确实希望工厂的函数定义是恒定的.
我正在编写一个新的应用程序,使用Guice进行依赖注入,以及Guava的属性验证前置条件.
我正在使用工厂模式根据外部输入创建bean.问题是,验证输入的首选方法是什么?(在可维护性,清晰度等方面)
我们假设这些类:
Bean.java
public interface Bean {
public Object getFoo();
}
Run Code Online (Sandbox Code Playgroud)
BeanImpl.java
public class BeanImpl implements Bean {
private final Object foo;
public BeanImpl(Object param) {
foo = param;
}
@Override
public String getFoo() {
return foo;
}
}
Run Code Online (Sandbox Code Playgroud)
我想检查"param"是否包含"foo"的有效值:
Preconditions.checkArgument(SomeValidator.isValid(param), "Bad param: %s!", param);
Run Code Online (Sandbox Code Playgroud)
我应该在哪里做,为什么?
是否有 FactoryBot 方法或某种方式来获取工厂的可用特征?
前任:
FactoryBot.define do
factory :address, class: Address do
trait :in_california do
state 'CA'
end
trait :in_new_york do
state 'NY'
end
trait :in_florida do
state 'FL'
end
end
Run Code Online (Sandbox Code Playgroud)
我希望能够以编程方式获取特征,例如 FactoryBot.get_traits (:address) ,它将返回为该工厂定义的特征数组,在本例中是
["in_california", "in_new_york", "in_florida"]
Run Code Online (Sandbox Code Playgroud)
这样是不是更清楚了?
我想在 NestJs 中动态创建类实例,而不是单例。
我找到了两种方法:
import { ChirpSensor } from './chirp-sensor/chirp-sensor';
@Injectable()
export class SensorsService {
registeredSensors: any;
constructor(
@InjectModel('Sensor') private readonly sensorModel: Model<ISensor>,
private i2cService: I2cService) {
const sensors = this.i2cService.getSensors();
sensors.forEach((sensor) => {this.registeredSensors[sensor._id] = new ChirpSensor({name: sensor.name})});
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是否与nest.js的DI方式一致
export const chirpFactory = {
provide: 'CHIRP_SENSOR',
useFactory: (options) => {
console.log('USING FACTORY CHIRP, options', options)
if (process.env.SIMULATION === 'true') {
return new ChirpSensorMock(options);
}
else {
return new ChirpSensor(options);
}
}
};
Run Code Online (Sandbox Code Playgroud)
不太确定如何继续这里/正确注入工厂,因为示例在构造函数中创建对象而没有选项?
NestJs …
我需要使用一个AndroidViewModelwith 应用程序上下文和一个SavedStateHandle. 我已经将它与应用程序上下文一起使用了,但是我无法向SavedStateHandle它添加 a 。
这就是我所拥有的,只有应用程序上下文:
// A1. get ViewModel in Fragment
val viewModel = ViewModelProvider(viewLifecycleOwner).get(MyViewModel::class.java)
// A2. MyViewModel derives from my custom BaseAndroidViewModel
class MyViewModel(application: Application) :BaseAndroidViewModel(application)
// A3. BaseAndroidViewModel in turn derives from AndroidViewModel
open class BaseAndroidViewModel(application: Application) : AndroidViewModel(application)
Run Code Online (Sandbox Code Playgroud)
对于这个问题,我认为这可能会简化为:
// B1. get ViewModel in Fragment
val viewModel = ViewModelProvider(viewLifecycleOwner).get(MyViewModel::class.java)
// B2. BaseAndroidViewModel in turn derives from AndroidViewModel
class MyViewModel(application: Application) : AndroidViewModel(application)
Run Code Online (Sandbox Code Playgroud)
那么,对于还有一个SavedStateHandlein MyViewModel,我将如何修改片段中的调用(B1示例代码中的行)?我需要明确调用工厂SavedStateViewModelFactory …
android factory android-viewmodel android-architecture-components
我正在尝试构建一个脚本以在我未来的项目中导入。该脚本应该在 tk.Frame 中创建一些 tk.Frames 并让我在main 中编辑创建的那些。
我认为,到达那里的最佳方法是创建一个 Holder_frame 类并放入一些嵌套类。这样我就可以使用 Holder_frame.F1在我的main 中调用它们。我尝试了很多代码,最后我在这里创建了一个帐户。无论如何,这里是我所在的地方:
import tkinter as tk
from tkinter import Frame,Button
class BaseClass(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.pack()
class Holder_frame(tk.Frame):
Names = []
def __init__(self, master, frames=2):
tk.Frame.__init__(self, master)
self.master = master
frame_names = Holder_frame.Names
for i in range(0,frames):
frame_names.append("F"+str(i+1))
print(frame_names)
Holder_frame.factory()
def factory():
print(Holder_frame.Names)
print(type(BaseClass))
for idex,i in enumerate (Holder_frame.Names):
print(i)
class NestedClass(BaseClass):
pass
NestedClass.__name__ = i
NestedClass.__qualname__ = i
if __name__ == …Run Code Online (Sandbox Code Playgroud)