我有一种情况(我猜是非常标准的)我需要执行一些业务计算并在数据库中创建一堆记录.如果在任何时候出现任何问题,我需要从数据库中回滚所有内容.显然,我需要某种交易.我的问题是我在哪里实现事务支持.这是我的例子
//BillingServices - This is my billing service layer. called from the UI
public Result GenerateBill(BillData obj)
{
//Validate BillData
//Create a receivable line item in the receivables ledger
BillingRepository.Save(receivableItem);
//Update account record to reflect new billing information
BillingRepository.Save(accountRecord);
//...do a some other stuff
BillingRepository.Save(moreStuffInTheDatabase);
}
Run Code Online (Sandbox Code Playgroud)
如果对数据库的任何更新失败,我需要将其他更新回滚并退出.我只是通过我可以调用的存储库公开Connection对象
Connection.BeginTransaction()
或者,我只是在服务层验证,只是在存储库中调用一个保存所有对象并处理事务的方法?这对我来说似乎并不合适.看起来它会迫使我在数据层中投入很多业务逻辑.
什么是正确的方法?如果我需要跨越存储库(或者那是不好的设计)怎么办?
jCarousel文档说明以下内容:
- 通过将回调函数itemLoadCallback作为配置选项传递,您可以动态创建(li)内容的项目.
{...}- jCarousel包含一个方便的方法add(),可以传递要创建的项的索引和要创建的项的innerHTML字符串.
我的问题:
是否可以删除所有项目并重新绑定到新集合?
顺便说一句:我不一定需要一种"便利方法"来做到这一点.我非常乐于解决问题.
仅供参考:这个策略似乎不起作用.
有谁知道如何简单地打开和关闭Excel工作簿?
我不需要从文件中读取任何数据,我只需要打开并关闭它.(*)
我猜我需要引用Microsoft.Office.Interop.Excel程序集.
*原因:我已经使用第三方库(Aspose)配置了数据透视表信息.现在我需要阅读生成的数据透视表.
不幸的是,Aspose库无法在运行时生成数据透视表.它需要有人用Excel打开文件,以便Excel可以生成数据透视表值.
我是.NET开发人员,但对于我目前的项目,我需要使用Google Caja,这是一个Java项目.嗯,哦!
我在Windows机器上的http://code.google.com/p/google-caja/wiki/RunningCaja上按照指南操作,但无法运行程序.他们建议的命令行不起作用,所以我进入ant-jars目录并尝试运行plugin.jar:
D:\java\caja\svn-changes\pristine\ant-jars>java -cp . -jar pluginc.jar -i test.htm
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
at com.google.caja.plugin.PluginCompilerMain.<init>(PluginCompilerMain.java:78)
at com.google.caja.plugin.PluginCompilerMain.main(PluginCompilerMain.java:368)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 2 more
Run Code Online (Sandbox Code Playgroud)
那是怎么回事?
我也尝试过file:/// d:/java/caja/svn-changes/pristine/ant-jars/test.htm而不是test.htm.看来源,似乎文件参数是一个Uri ......
我也尝试在pluginc上运行IKVM,然后不用担心java,但是它也提出了ClassDefNotFoundException ......
谢谢!
编辑:感谢大家的帮助到目前为止:)仍然卡住了.请坚持下去,这可能是.net开发人员转向美丽的OSS技术的开始!
d:\java\caja\svn-changes\pristine\ant-jars>java -cp .\*.* com.google.caja.plugin.PluginCompilerMain
=> NoClassDefFoundError: /\commons-cli/jar
D:\java\caja\svn-changes\pristine\ant-jars>java -cp .\*.*;..\third_party\java\jakarta_commons\*.* com.google.caja.plugin.PluginCompilerMain
=> Could not find the main class: com.google.caja.plugin.PluginCompilerMain
Run Code Online (Sandbox Code Playgroud)
鉴于build.xml文件中的代码,有什么方法可以让它运行吗?
我的问题:
是否有一种普遍接受的设计模式可以用来实现这一目标?
但是你可以理解,我希望尽量减少这种变化带来的复杂性.
顺便说一下,我的应用程序是一个ASP.NET MVC 2应用程序,所以如果我可以利用任何现有的基础设施,那将是很好的.
编辑:我正在使用表单身份验证.
编辑:我还需要跟踪超级用户代表另一个用户行事的事实.我需要这样做有两个原因:
编辑: @Jordão提出了一个主要可行的解决方案.我唯一担心的是 - 如果超级用户(模仿另一个用户)导航到主屏幕,并且屏幕顶部显示'Hello [User]',我希望它说'Hello [模拟用户]'为反对'你好[超级用户]'.而且我担心@Jordão的解决方案会使这个屏幕和其他具有类似要求的屏幕的实现变得更加复杂.
impersonation design-patterns web-applications architectural-patterns asp.net-mvc-2
鉴于以下示例代码,我如何配置Pex以尊重我的代码合同?
public static IEnumerable<User> Administrators(this UserGroup userGroup)
{
Contract.Requires(userGroup != null);
Contract.Requires(userGroup.UserList != null);
return userGroup.UserList.Where(ul => ul.IsAdmin == true);
}
Run Code Online (Sandbox Code Playgroud)
当前问题:当我运行Pex时,它仍然会生成违反指定代码契约的测试用例.
仅供参考:以下是我的csproj文件中的"代码合同"设置.
我需要在listview中添加标题,标题应始终显示甚至滚动列表.
是否有可能在Android列表视图?
我有一个警报系统,通过电子邮件发出警报.我想包含诊断信息,但只有在最终用户点击[+]按钮时才能显示.
这可以在电子邮件中做到吗?我可以不使用Javascript而只使用CSS吗?
如果它有帮助,我的大多数客户使用Outlook,iPhone或黑莓
考虑一下这个Plunkr.
在我的监听器内部,我想根据已解决的承诺更新属性.
$$v?这是HTML:
<!DOCTYPE html>
<html id="ng-app" ng-app="myAngularApp">
<head>
<script data-require="angular.js@*" data-semver="1.2.0-rc2" src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
<script src="script.js"></script>
</head>
<body ng-controller="MyController">
<input ng-model="myDto.Weight" />{{myDto.Status}}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是JavaScript:
var myDto = {Weight: 200, Status: 'Acceptable'};
var myAngularApp = angular.module('myAngularApp', []);
myAngularApp.factory('myService', function($q){
return {
getMyDto: function(){
var deferred = $q.defer();
deferred.resolve(myDto);
return deferred.promise;
}
};
});
myAngularApp.controller('MyController', function MyController($scope, myService){
$scope.myDto = myService.getMyDto();
$scope.$watch('myDto.Weight', function(newVal, oldVal){
if (newVal < 150) {
$scope.myDto.$$v.Status = 'Too Light!'; // Is this …Run Code Online (Sandbox Code Playgroud) 想象一下,我有一个访问索引,其中包含类型为"visit"的文档,如下所示:
{
"id": "c223a991-b4e7-4333-ba45-a576010b568b",
// other properties
"buildingId": "48da1a81-fa73-4d4f-aa22-a5750162ed1e",
"arrivalDateTimeUtc": "2015-12-22T21:15:00Z"
}
Run Code Online (Sandbox Code Playgroud)
以下函数将返回一个直方图,该直方图根据给定的时区返回给定范围内每一天的访问量.
public Bucket<HistogramItem> Execute(MyParameterType parameters)
{
var buildingFilter = Filter<VisitProjection>.Term(x => x.BuildingId, parameters.BuildingId);
var dateFilter = Filter<VisitProjection>.Range(r => r
.OnField(p => p.ArrivalDateTimeUtc)
.GreaterOrEquals(parameters.EarliestArrivalDateTimeUtc)
.LowerOrEquals(parameters.LatestArrivalDateTimeUtc)
);
var result = _elasticClient.Search<VisitProjection>(s => s
.Index("visits")
.Type("visit")
.Aggregations(a => a
.Filter("my_filter_agg", f => f
.Filter(fd => buildingFilter && dateFilter)
.Aggregations(ta => ta.DateHistogram("my_date_histogram", h => h
.Field(p => p.ArrivalDateTimeUtc)
.Interval(parameters.DateInterval) // "day"
.TimeZone(NodaTimeHelpers.WindowsToIana(parameters.TimeZoneInfo)) // This is a critical piece of the equation.
.MinimumDocumentCount(0) …Run Code Online (Sandbox Code Playgroud)