我有一套相当简单的功能,我有多个实现,例如,可以由Redis,MongoDB或PostgreSQL支持的数据存储.我应该如何构造/编写我的代码,以便想要使用其中一个实现的代码只需要该实现的依赖项,例如,psycopg2如果他们使用Redis后端,则不需要安装它们.
这是一个例子.假设以下模块,example.py.
class RedisExample(object):
try:
import redis
except ImportError:
print("You need to install redis-py.")
def __init__(self):
super(RedisExample, self).__init__()
class UnsatisfiedExample(object):
try:
import flibbertigibbet
except ImportError:
print("You need to install flibbertigibbet-py")
def __init__(self):
super(UnsatisfiedExample, self).__init__()
Run Code Online (Sandbox Code Playgroud)
这是我的Python shell体验:
>>> import example
You need to install flibbertigibbet-py
Run Code Online (Sandbox Code Playgroud)
交替:
>>> from example import RedisExample
You need to install flibbertigibbet-py
Run Code Online (Sandbox Code Playgroud)
我真的宁愿我没有得到那个错误,直到我试图实例化一个UnsatisfiedExample.是否有任何一种常见的方法来解决这个问题?我已经考虑过制作example一个包,每个后端都有自己的模块并使用工厂函数,但我想确保我没有错过更好的东西.
谢谢.
我目前正在重写一个电子商店 - 但只有客户端,即CMS仍然主要是机智.我没有使用预先构建的框架,因为系统必须保持与CMS的向后兼容性,我必须完全自由地使用代码结构.
新系统纯粹基于MVC,我有一个Bootstrapper,它根据当前的uri加载控制器,后者使用模型进行实际工作 - 包括会话和数据库.
tl; dr这是我的第一个没有预先构建框架的项目.
在设计模式方面我很缺乏经验.我知道大多数受欢迎的工作如何工作但从未使用过.
现在我怀疑代码气味,因为我的所有模型都是纯粹由静态方法组成的类.我发现以不同的方式做这些事情没有任何好处.我通常需要在代码中的各个地方使用一些方法.即我需要在主布局中获取登录用户,检查用户权限以查看bootstraper中的当前页面,由控制器显示用户面板.如果我不使用静态,我需要每次重新实例化一个对象或保持全局对象.一次也不需要多于一个这样的课程.
我必须遗漏一些东西,因为即使我使用OOP,我的一些类对于他们的方法来说只是毫无意义的容器(有时是几个私有变量).我本来可以使用PHP4和简单的功能.
任何意见或建议将受到高度赞赏.
编辑:尽管有这些受过良好教育的答案,我仍然不相信.尽管这是因为我缺乏经验最有可能,我还是没有预见到任何与当前的设置会错.我的意思是我甚至不知道由于现在的代码架构而给我带来任何不便的情况.我希望我没有得到一个严厉的教训,因为改变任何事情为时已晚......
我对我在其中一个较旧的库中遇到的以下代码段有疑问.
try
{
throw "this is an error message";
}
catch( char* error )
{
cout << "an exception occured: " << error << endl;
}
Run Code Online (Sandbox Code Playgroud)
我对这种情况下的行为的理解是,错误消息是按值抛出的,这意味着文本的副本
"这是一条错误消息"
被扔了.catch子句指定一个指向char的指针作为预期的异常类型.有人可以启发我,为什么这个有效?此上下文中的另一个问题涉及为错误消息分配的内存.由于异常类型是指向char*的指针,可以假设错误消息的内存已在堆上动态分配,并且必须由用户删除?
提前致谢
我有一个自定义的MSBuild任务,它接受一组JavaScript文件,缩小它们并输出它们,扩展名为.min.js.当我通过Visual Studio进行正常构建时,它完美地工作,并且.min.js文件输出到与原始文件相同的目录.当我尝试使用Visual Studio中的"发布"功能进行部署时,只有原始.js文件才能进入发布目录....如何将我的任务输出计为"内容",以便它将结束在已发布的文件夹中?
编辑:我能够通过在我的任务中添加Output标签然后创建一个ItemGroup来解决这个问题:
<Target Name="AfterBuild">
<ItemGroup>
<JavaScriptFiles Include="Scripts\*.js" Exclude="Scripts\*.min.js" />
</ItemGroup>
<JsCompress Files="@(JavaScriptFiles)" OutputPath="Scripts">
<Output TaskParameter="CompressedFiles" ItemName="CompressedFiles" />
</JsCompress>
<ItemGroup>
<Content Include="@(CompressedFiles)" />
</ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud) 我有一个带制表符分隔格式的文件,带有尾随换行符,例如,
123 abc
456 def
789 ghi
Run Code Online (Sandbox Code Playgroud)
我希望编写函数将文件的内容转换为嵌套列表.到目前为止,我尝试过:
def ls_platform_ann():
keyword = []
for line in open( "file", "r" ).readlines():
for value in line.split():
keyword.append(value)
Run Code Online (Sandbox Code Playgroud)
和
def nested_list_input():
nested_list = []
for line in open("file", "r").readlines():
for entry in line.strip().split():
nested_list.append(entry)
print nested_list
Run Code Online (Sandbox Code Playgroud)
.
前者创建一个嵌套列表,但包含\n和\ t字符.后者不是一个嵌套列表,而是没有\n和\ t字符的许多等效列表.
有人帮吗?
问候,S ;-)
我正在创建一个脚本供用户运行.我需要将输出重定向到我在脚本内创建的文件(hostname-date).
除了如何从同一个脚本中复制脚本的输出之外,我有所有的部分.我可以找到的所有示例都将脚本调用,然后将其调用到日志中,但这不是一个选项.
-Alex
我们为QNX4,QNX6和Linux提供了大量的C/C++模块和项目.所有这些都是用Eclipse/QNX Momentics编写的,我们使用项目集(psf文件)根据需要将不同的模块组合到项目中.这些项目是使用make构建的.psf文件指定特定项目所需的模块.
我已经看过两个CI /夜间构建系统(BuildBot,Apache Continuum),但是对于psf文件都不能很好地工作,或者直接支持它们.
有没有人知道CI系统允许我使用它们,而不必使用脚本来检查东西等等?
顺便说一句,我们正在使用CVS进行版本控制.
在Ruby/Rails中生成随机DateTime的最佳方法是什么?试图创建一个漂亮的seeds.rb文件.要像这样使用它:
Foo.create(name: Faker::Lorem.words, description: Faker::Lorem.sentence, start_date: Random.date)
Run Code Online (Sandbox Code Playgroud) 我目前正在使用SQLite将iphone应用程序迁移到CoreData.
我需要执行INSERT或REPLACE才能添加新内容,是否有办法执行此操作或者是否必须获取所有数据库并查找现有对象并添加新对象?
谢谢.
我有List对象,如下所示:
www.mysite.com/lists/123
其中123是列表的id.我想要做的是添加列表标题的网址,以便它提供更多信息(谷歌或其他).所以我希望它看起来像:
www.mysite.com/lists/123/title-of-list-number-123
你如何添加这样的网址?如果您只输入:www.mysite.com/lists/123没有标题,是否应该找到标题然后重定向到新路线?