我正在制作一个可以发送电子邮件或短信的信使,并且可以立即发送或稍后发送(信息保存在数据库中).我已经做了两个解决方案,但两个都不令我满意.
我正在将代码集中在一个Factory中,而Factory模式的代码非常简单:
class MessageFactory
{
static public function get($type,$em)
{
$instance = null;
switch ($type) {
case 'email':
$instance = new EmailMessage($em);
break;
....
return $instance;
}
class EmailMessage implements MessangerInterface
{
...
public function send( $eMessage,array $receivers, $time=NULL)
{
interface MessangerInterface
{
public function send($message,array $receivers);
}
Run Code Online (Sandbox Code Playgroud)
第一个解决方案:只需调用普通的静态方法
$messanger = Factory\MessageFactory::get('email',$em);
$messanger->send($eMessage, array('tom'=>'tom@gmail.com'));
Run Code Online (Sandbox Code Playgroud)
这是一个糟糕的解决方案,因为我需要将Doctrine Manager作为参数传递给方法
第二种解决方案:将其用作Symfony 2服务
services:
my.messanger:
class: Bundle\Factory\MessangerInterface
factory_class: Bundle\Factory\MessageFactory
factory_method: get
arguments:
messanger_type: %messanger.type%
Run Code Online (Sandbox Code Playgroud)
并且还将学说作为论据传递.但是使用这样的解决方案我不能在我的代码中选择messanger.type,它使用配置参数定义为email或sms; 我需要在代码中具有选择类型的能力.
另外我有一个问题,我需要在课堂上发送电子邮件或短信,这意味着我需要一个外部服务,得到这样的:
class EmailMessage …Run Code Online (Sandbox Code Playgroud) 我有这样的代码并使用 Jupyter-Notebook
for j in range(timesteps):
a_int = np.random.randint(largest_number/2) # int version
Run Code Online (Sandbox Code Playgroud)
我得到随机数,但是当我尝试将部分代码移动到函数时,我开始在每次迭代中收到相同的数字
def create_train_data():
np.random.seed(seed=int(time.time()))
a_int = np.random.randint(largest_number/2) # int version
return a
for j in range(timesteps):
c = create_train_data()
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况以及如何解决?我想可能是因为 Jupyter-Notebook 中的进程