我是SSIS/C#的新手(我通常是一名Java开发人员),如果这是一个非常愚蠢的问题,请道歉.
本质上问题是:我有两个数据流任务,它们加载数据并将它们导出为传统的平面文件格式.格式化由脚本任务(C#)完成.
我想做的是在两者之间分享一些共同的代码.例如,我可以创建一个公共基类,然后为我的两个不同的脚本任务扩展它.
然而,似乎SSIS并没有真正为此做好准备.
有谁知道是否有办法完成我想做的事情?
我有一些标准的SQLAlchemy模型,我可以在项目中重复使用.像这样的东西:
from sqlalchemy import Column, Integer, String, Unicode
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Category(Base):
__tablename__ = 'category'
id = Column(Integer, primary_key=True)
slug = Column(String(250), nullable=False, unique=True)
title = Column(Unicode(250), nullable=False)
def __call__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
我想把它放在一个共享库中,然后将它导入到每个新项目中,而不是剪切和粘贴它,但我不能,因为declarative_base实例是在项目中单独定义的.如果不止一个,他们将不会分享会话.我该如何解决这个问题?
这是另一个建议使用mixin类的问题.这可行吗?SQLAlchemy会从mixin类中准确地导入外键吗?
我正在研究一些与数据库模式接口的代码,该数据库模式为持久性图形建模.在我详细讨论我的具体问题之前,我认为可能有助于提供一些动力.我的架构围绕书籍,人物和作者角色.一本书有许多作者角色,每个角色都有一个人.但是,您必须创建新书并对新版本进行修改,而不是允许对书籍对象进行直接UPDATE查询.
现在,回到Haskell的土地上.我目前正在使用几个类型类,但重要的是我有HasRoles和Entity:
class HasRoles a where
-- Get all roles for a specific 'a'
getRoles :: a -> IO [Role]
class Entity a where
-- Update an entity with a new entity. Return the new entity.
update :: a -> a -> IO a
Run Code Online (Sandbox Code Playgroud)
这是我的问题.在更新图书时,您需要创建新图书版本,但还需要复制以前的图书角色(否则会丢失数据).最简单的方法是:
instance Entity Book where
update orig newV = insertVersion V >>= copyBookRoles orig
Run Code Online (Sandbox Code Playgroud)
这是好的,但有一些困扰我,这就是缺乏不变,如果事情是任何担保Entity 和 HasRoles,然后插入一个新的版本将复制在现有的角色.我想到了两个选择:
一个'解决方案'是介绍RequiresMoreWork a b.从上面开始,insertVersion现在返回一个HasRoles w => …
我正在使用AngularJS + Karma.
configService管理我的应用程序的设置(例如背景颜色,它在调试模式下,一般权限......).它使用$ http加载初始数据.我成功地为服务编写了测试,但我的指令和控制器使用它.
当我为指令编写单元测试时,我必须模拟服务.
我知道我能做到:
spyOn(configService, 'getBackgroundColor').andCallFake(function (params) {
return "red";
});
Run Code Online (Sandbox Code Playgroud)
但该服务有25多种方法和初始数据加载.我不想在每个测试套件中编写(并维护)这个spyOn的东西.更重要的是,我使用$ http在工厂加载数据,这也应该被嘲笑.如果我只是注入服务并模拟调用,我仍然会发出http get请求.
您认为重用模拟的最佳方法是什么?
我今天和同事讨论过.他声称用C语言编写DLL将允许使用任何语言编写的任何其他应用程序来使用该DLL.但是,如果该DLL是用C++编写的,则可能使用该DLL的应用程序数量有限(可能是因为语言限制).
我希望这个问题不是大猩猩与鲨鱼有点问题.如果是,请关闭它.
这主要是由于SQL问题的答案.由于性能原因,故意省略UDF和子查询.我没有包含可靠性而不是它应该被视为理所当然,但代码必须工作.
性能总是先行?如此多的答案以性能为主要优先考虑.我的用户似乎更关心代码的修改速度.因此报告需要15秒而不是12秒才能运行.只要我不找不提供解决方案的借口,他们就可以忍受.
显然,如果15秒变为15分钟,则存在问题,但用户需要该功能.他们希望应用程序适应业务规则更改和增强请求.我希望能够在6个月后查看代码,并且能够在一个容易识别的位置进行更改,而不是追逐所有那些地方,因为他们认为调用另一个函数或子例程或Udf妨碍表现.
所有这一切,我会命令:可维护性(变化是生活中的事实.),性能(没有人喜欢盯着沙漏.),可重用性(很难确定应该再次使用哪些代码).
当我从头开始编写代码时,我养成了在一个函数中快速编写所有内容的坏习惯,整个时间都在考虑"我将在以后更加模块化".然后,当后来出现时,我有一个工作产品,任何修复它的尝试都意味着创建功能,并且必须弄清楚我需要通过什么.
它变得最糟糕,因为当你的项目几乎完成时重新设计类变得非常困难.例如,我通常在开始编写代码之前做一些规划,然后当我的项目完成时,我意识到我可以使类更加模块化和/或我可以使用继承.基本上,我认为我没有做足够的计划,而且我不会获得超过一个级别的抽象.
所以最后,我坚持使用一个具有大型主函数,一个类和一些辅助函数的程序.不用说,它不是非常可重复使用的.
有没有人有同样的问题,有任何提示可以克服这个问题?我想到的一件事是用pseduocode编写main函数(没有太多细节,但足以看到他们需要什么对象和函数).本质上是一种自上而下的方法.
这是一个好主意吗?还有其他建议吗?
我的着色器通常共享许多相同的功能.例如,漫反射/镜面反射照明的计算.我想写一次,然后在不同的着色器中重用代码.
Glsl不了解文件,也不支持类似c的#include预处理器指令.
我知道glsl支持从多个cstrings编译源代码,但是你怎么知道要包含哪些cstrings?你实现了自己的包含版本吗?或者你为每个着色器创建某种元文件?
Android,WPF以及我一直在使用的大多数平台都可以在单个文件中重用和"集中"ui资源,如颜色和样式.
在android中它可以这样做:
在colors.xml文件中:
<color name="secondary_text_color">#ffcc67</color>
Run Code Online (Sandbox Code Playgroud)
在任何视图中:
<TextView text="some text" textColor="@colors/secondary_text_color" />
Run Code Online (Sandbox Code Playgroud)
iOS中有类似的东西吗?
我不是想在iOS中复制android,但我正在努力理解应该遵循的ui重用模式(如果有的话).
我遇到的唯一的事情是在代码中定义主题,并在代码背后重用它,这是正确的方法吗?
以下简单代码尝试在两个单独的菜单上重用Window.Resources中定义的MenuItem.
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:collections="clr-namespace:System.Collections;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<collections:ArrayList x:Key="menuItemValues">
<MenuItem Header="First"/>
<MenuItem Header="Second"/>
<MenuItem Header="Third"/>
</collections:ArrayList>
<MenuItem x:Key="menuItem" x:Shared="False"
ItemsSource="{StaticResource menuItemValues}"
Header="Shared menu item"/>
</Window.Resources>
<StackPanel>
<Menu HorizontalAlignment="Left" VerticalAlignment="Top">
<StaticResource ResourceKey="menuItem"/>
<StaticResource ResourceKey="menuItem"/>
</Menu>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
这开始很棒,当你第一次选择菜单时,一切看起来都很好.第一个菜单有所需的MenuItems,
第二个也是如此:
但是当您导航回第一个菜单时,MenuItems会消失:
有人可以解释为什么菜单消失,并有办法让这个工作?
这是在调查另一个异常的SO问题时发现的.我尝试使用在另一个SO问题上讨论的策略,它似乎解决了问题,直到你第二次导航回菜单并且它消失了.
我在2台不同的机器上重现了这个问题:
code-reuse ×10
c++ ×2
angularjs ×1
c ×1
c# ×1
dll ×1
glsl ×1
haskell ×1
include ×1
ios ×1
jasmine ×1
karma-runner ×1
maintenance ×1
menuitem ×1
modularity ×1
performance ×1
preprocessor ×1
python ×1
sqlalchemy ×1
ssis ×1
swift ×1
unit-testing ×1
wpf ×1
xaml ×1