我似乎在精神上陷入了Flyweight模式的困境.
首先,假设我有一次性用品DisposableFiddle和工厂FiddleFactory:
public interface DisposableFiddle : IDisposable
{
// Implements IDisposable
}
public class FiddleFactory
{
public DisposableFiddle CreateFiddle(SomethingThatDifferentiatesFiddles s)
{
// returns a newly created fiddle.
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在我看来,客户很清楚FiddleFactory工厂声称没有创建小提琴的所有权,并且客户有责任在完成它时处理小提琴.
但是,让我们说我想通过使用Flyweight模式在客户端之间共享小提琴:
public class FiddleFactory
{
private Dictionary<SomethingThatDifferentiatesFiddles, DisposableFiddle> fiddles = new ...;
public DisposableFiddle CreateFiddle(SomethingThatDifferentiatesFiddles s)
{
// returns an existing fiddle if a corresponding s is found,
// or a newly created fiddle, after adding it to the dictionary,
// if no corresponding …Run Code Online (Sandbox Code Playgroud) 在数据库使用方面,过去十年是ORM的时代,数百人争相在普通的老式RMDBS中坚持我们的对象图.现在,我们似乎正在目睹面向文档的数据库时代的到来.这些 数据库针对无架构文档进行了高度优化,但对于它们并行扩展和查询群集的能力也非常具有吸引力.
面向文档的数据库与RDBMS相比还具有一些优势,可以在面向对象的设计中保持数据模型的持久性.由于表是无模式的,因此可以将属于不同类的对象并排存储在继承层次结构中.此外,随着域模型的更改,只要代码可以处理从旧版本的域类中获取对象,就可以避免在每次更改时都迁移整个数据库.
另一方面,面向文档的数据库的性能优势主要出现在存储更深层文档时.在面向对象的术语中,由其他类组成的类,例如,博客文章及其注释.在大多数这样的例子中,我可以提出,例如博客,读取访问的收益似乎被每次新评论时必须写整个博客文章"文档"的惩罚所抵消.添加.
在我看来,面向文档的数据库可以为面向对象的系统带来显着的好处,如果一个人非常小心地组织深度图中的对象,这些图是针对数据读写方式而优化的,但这意味着了解用例面前.在现实世界中,我们经常不知道,直到我们实际上有一个实时实现,我们可以分析.
那么关系型和面向文档的数据库是一个波动和环形交叉口的情况吗?我对人们的意见和建议感兴趣,特别是如果有人在面向文档的数据库上构建了任何重要的应用程序.
我知道eval,出于速度和安全原因,我应该避免使用JavaScript.但就PHP而言,很少提及安全性.更常见的是,由于偶然使用,程序运行速度比应该慢eval.
你应该在什么具体情况下使用,eval因为没有别的办法呢?
为清楚起见:
我们不是在谈论用户提供的数据.所以问题集中在纯粹和完全受控的服务器端有效使用eval.
我已经尝试了两种方法将泛型类型参数约束为可空类型,但两者似乎都有一些意想不到的问题.
第一次尝试(使用T <:AnyRef):
scala> def testAnyRefConstraint[T <: AnyRef](option:Option[T]):T = {
| //without the cast, fails with compiler error:
| // "found: Null(null) required: T"
| option getOrElse null.asInstanceOf[T]
| }
testAnyRefConstraint: [T <: AnyRef](Option[T])T
scala> testAnyRefConstraint(Some(""))
res0: java.lang.String =
scala> testAnyRefConstraint(Some(0))
<console>:16: error: inferred type arguments [Int] do not conform to method testAnyRefConstraint's type parameter bounds [T <: AnyRef]
testAnyRefConstraint(Some(0))
Run Code Online (Sandbox Code Playgroud)
这似乎完全符合我的要求,但我不明白为什么需要将null转换为T.
第二次尝试(使用T>:Null):
scala> def testNullConstraint[T >: Null](option:Option[T]):T = {
| option getOrElse null
| }
testNullConstraint: [T >: Null](Option[T])T
scala> …Run Code Online (Sandbox Code Playgroud) 现在我尝试使用MPI_Send和MPI_Recv在多个进程中传递最佳找到的解决方案.每个流程中找到的最佳解决方案应该传递到控制流程,以便存储所有最佳解决方案并在需要时发送到其他流程.我的问题是如何实现它?例如,一旦进程1找到新的最佳,它就可以调用MPI_Send并将其发送到控制进程.有没有办法让控制过程检测到有消息要接收?每个MPI_Send都需要MPI_Recv吗?期待听取您的专家的意见.谢谢!
谢谢你的建议.我想要做的是让几个工作进程向一个控制进程发送消息.工作流程决定何时发送.控制过程必须检测何时接收.MPI_Proble可以这样做吗?
常量指针和引用之间有什么区别?
顾名思义的常量指针不能再绑定.参考的情况也是如此.
我想知道在哪种情况下优先于另一种情况.他们的C++标准及其实现有何不同?
干杯
在阅读具有该名称的Unix系统调用的mkdir(2)手册页后,看来该调用不会在路径中创建中间目录,只会在路径中创建最后一个目录.是否有任何方法(或其他功能)来创建路径中的所有目录,而无需手动解析我的目录字符串并单独创建每个目录?
抽象类可以用作"主机"和"插件"之间的契约对象吗?这个想法是插件继承了契约(我们称之为适配器).我们也理解框架中的所有参与者都必须继承MarshalByRefObject(MBRO).所以,这就是我们的想法 -
主持人:
class Host : MarshalByRefObject
{
}
Run Code Online (Sandbox Code Playgroud)
合同:
public abstract class PluginAdapter : MarshalByRefObject
{
}
Run Code Online (Sandbox Code Playgroud)
插件:
class myPlugin : PluginAdapter
{
}
Run Code Online (Sandbox Code Playgroud)
这三个都存在于不同的asm中.我们的主机将为每个插件创建一个新的AppDomain,并按如下方式创建PluginAdapter:
{
ObjectHandle instHandle = Activator.CreateInstance(
newDomain, data.Assembly.FullName, data.EntryPoint.FullName);
PluginAdapter adapter = (PluginAdapter)instHandle.Unwrap();
}
Run Code Online (Sandbox Code Playgroud)
编辑:data具体类型在哪里myPlugin.
我们想知道该框架的实施是否有效.我们已经看到使用接口(IPlugin)进行插件派生的文章,以及作为契约的具体类.这些文章还会说可以使用抽象类,但没有给出该实现的示例.是否要求合同是具体的类?
编辑:在Richard Blewett的这个例子中 - C#Reflection - 他使用了一个更简单的实现:
合同:
public interface IPlugIn
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
插件:
public class PlugIn : MarshalByRefObject, IPlugIn
{
}
Run Code Online (Sandbox Code Playgroud)
现在,如果使用抽象类作为契约,则插件不能继承合同和MBRO.那么,什么成为可扩展插件框架的最佳实现.我们是否应该继续实施远程操作,尽管最初我们正在开发单机操作?该项目预计将分布在整个网络中,也可能跨越互联网.我们还没有实现Tcp,因为我们正在努力让插件框架的基础知识得到充分理解和操作.
使用环回在单台机器上实现Tcp远程处理是否有意义?
我正在运行一个脚本来管理远程(SSH)计算机上的进程.我们称之为five.py
#!/usr/bin/python
import time, subprocess
subprocess.call('echo 0',shell=True)
for i in range(1,5):
time.sleep(1)
print(i)
Run Code Online (Sandbox Code Playgroud)
如果我现在跑
ssh user@host five.py
Run Code Online (Sandbox Code Playgroud)
我想看看输出
0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
逐秒出现在我的标准输出上(就像在本地执行时那样)..会发生什么:我立即从"echo"获得0,其余只在整个程序结束后立即出现.(无法将'five.py'嵌套到bash脚本中;通过'python five.py'调用它;或者使用'print >> sys.stdout,i').
这必须与python写入stdout的方式有关,因为其他程序表现得很正常.一个功能解决方法是
import time, subprocess
import sys
subprocess.call('echo 0',shell=True)
for i in range(1,5):
time.sleep(1)
sys.stdout.write(str(i)+'\n')
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
但是必须有一个比改变我所有的打印陈述更好的解决方案!
我正在使用Jeffrey Palermo描述的Onion架构设计ASP.NET MVC应用程序.
这是一个ASP.NET MVC 2.0项目中,我要求所有的视图中使用专用的视图模型是强类型的 - 我们不会通过域模型对我们的看法.我们使用AutoMapper进行翻译 - AutoMapper在基础架构中被隔离,Web不知道或不关心AutoMapper的使用.
目前,我正在Web项目中定义IViewModelMapping接口 - 只是因为控制器将使用此服务,并且它可以直接访问自己的View模型.这样,界面可以访问域模型(在Core中)和View模型(在Web中).
为了提供IViewModelMapping接口的实际实现,我在Infrastructure项目中创建了一个ObjectMapping命名空间,它将实际的映射实现与洋葱的Intrastructure隔离开来.在这样做时,这将要求Infrastructure依赖于BOTH Core AND Web.
我的问题是:由于这两个项目在技术上都位于洋葱的郊区(在同一层中) - 是否允许一个项目依赖于该层中的另一个项目?有没有人注意到这个设计有任何潜在的陷阱?
另一种设计是将IViewMapper接口移动到Core中 - 但这是不可能的,因为Core无法访问ViewModel类.我也可以将视图模型移动到Core中,但我觉得它们不属于那里,因为它们特定于UI层.
建议的体系结构如下 - 请注意,基础结构依赖于Core和Web.Web保持隔离状态,只能访问Core业务逻辑.
architecture asp.net-mvc n-tier-architecture onion-architecture