我总是通过FTP(有时甚至是xcopy)部署我的Web应用程序,然后自己手动运行数据库脚本.
我开始在90年代部署这种方式,但最近,我看到了一些带有安装程序的Web应用程序.我开始质疑,如果我被锁定在一个过时的过程中.我是一名顾问,我的应用程序通常是内部的,所以我不担心分发和让其他人安装它们.
但我很好奇; 有人创建安装程序来部署内部asp.net Web应用程序吗?
如果是这样,为什么?(自愿,强制或自动化过程的一部分)
你这样做有什么问题吗?
至少对我来说,Pair类是一个非常多用途的类.那么为什么微软将它放入System.Web.UI命名空间呢?
有没有理由让我的小脑无法理解?
谢谢.
我一直在使用 NuGet 的包管理器控制台来执行在 Visual Studio 中工作时需要执行的任何命令行活动。它工作得很好,因为我不需要离开 VS,但是当 cmdlet 提示输入更多信息(用户 ID、密码、确认等...)时,它就会挂起,我必须重新启动 VS。
无论如何,是否可以调整包管理器控制台,使其行为类似于标准的 Power Shell 控制台来提示用户?
大家都知道你应该在完成使用后立即关闭连接.
由于我的域对象模型设计存在缺陷,我必须在整个页面生命周期中保持连接打开状态.本质上,我有一个Just In Time属性,它在第一次调用时打开一个连接,然后在Page.Unload(..)上它将检查数据库连接是否打开,如果是,则关闭它.由于它只需要一秒钟,我认为它与立即关闭它没有多大区别.
这个可以吗?或者它应该在每次使用后立即关闭吗?
提前致谢.
是否有关于在重载方法上返回不同返回类型的最佳实践?例如,如果我在DAL中有一个Load方法,我要么加载一个项目或一堆项目.我知道我可以使用多种方法:
加载一个对象
MyBusinessObject LoadOne(int id)
{
}
Run Code Online (Sandbox Code Playgroud)
加载多个对象
MyBusinessObject[] LoadMany(params int[] ids)
{
}
Run Code Online (Sandbox Code Playgroud)
现在,我知道我可以做的是重载一个方法并具有不同的返回类型.像这样:
MyBusinessObject Load(int id)
{
}
Run Code Online (Sandbox Code Playgroud)
和
MyBusinessObject[] Load(params int[] ids)
{
}
Run Code Online (Sandbox Code Playgroud)
虽然似乎没有什么可以阻止我这样做,并且从API的角度来看它保持整洁,这看起来是个好主意吗?我昨晚遇到它,部分我认为我不应该这样做是因为想要匹配重载方法的返回类型.
我也可以让Load(int id)方法返回一个只包含一个项目的集合.在我看来,这违反了最少惊喜的原则,但是如果你期望返回一个项目,你应该返回该项目,你不应该返回包含单个项目的列表.
所以这是围绕这些想法的矛盾思想:
所以后两种想法比第一种想法更重要,但与此同时,第一种想法似乎是一种程序化的最佳实践.
有没有围绕这种做法的最佳做法?我有兴趣听听别人对这个问题的看法.
我正在设计一个网站,并希望建立一个像StackOverflow内置的良好信誉系统.
当我开始设计我的声誉系统时,我意识到SO Q/A模型并不适合我的应用程序(因为我的不是Q/A),也许我应该先做一些研究.
所以我的问题是; 在设计社区代表系统时我应该考虑什么?
背景故事:
因此,在过去的几个晚上,我一直坚持使用我一直在玩弄的重构器上的架构问题.没什么重要的,但它一直困扰着我.它实际上是DRY中的一个练习,并试图将它带到如DAL架构完全干燥的极端.这是一个完全哲学/理论的练习.
该代码部分基于@JohnMacIntyre的一个重构,我最近说服他在http://whileicompile.wordpress.com/2010/08/24/my-clean-code-experience-no-1上写博客. /.我倾向于稍微修改代码,以便将代码更进一步 - 通常,只是为了看看我可以从概念中获得多少额外的里程......无论如何,我的理由基本上是无关紧要的.
我的部分数据访问层基于以下架构:
abstract public class AppCommandBase : IDisposable { }
Run Code Online (Sandbox Code Playgroud)
这包含基本的东西,比如在处理AppCommand之后创建命令对象和清理.我的所有命令基础对象都源于此.
abstract public class ReadCommandBase<T, ResultT> : AppCommandBase
Run Code Online (Sandbox Code Playgroud)
这包含影响所有读命令的基本内容 - 特别是在这种情况下,从表和视图中读取数据.没有编辑,没有更新,没有保存.
abstract public class ReadItemCommandBase<T, FilterT> : ReadCommandBase<T, T> { }
Run Code Online (Sandbox Code Playgroud)
这包含一些更基本的通用内容 - 比如从数据库中的表中读取单个项所需的方法定义,其中表名,键字段名和字段列表名被定义为必需的抽象属性(待定义)由派生类.
public class MyTableReadItemCommand : ReadItemCommandBase<MyTableClass, Int?> { }
Run Code Online (Sandbox Code Playgroud)
它包含定义我的表名的特定属性,表或视图中的字段列表,键字段的名称,将数据从IDataReader行解析为业务对象的方法以及启动整个过程的方法.
现在,我的ReadList也有这个结构......
abstract public ReadListCommandBase<T> : ReadCommandBase<T, IEnumerable<T>> { }
public class MyTableReadListCommand : ReadListCommandBase<MyTableClass> { }
Run Code Online (Sandbox Code Playgroud)
不同之处在于List类包含与列表生成相关的属性(即PageStart,PageSize,Sort并返回IEnumerable)与单个DataObject的返回(只需要一个标识唯一记录的过滤器).
问题:
我讨厌我的MyTableReadListCommand类中有一堆属性在我的MyTableReadItemCommand类中是相同的.我已经考虑将它们移动到一个辅助类,但是虽然可以将成员内容集中在一个地方,但我仍然在每个类中都有相同的成员,而是指向帮助类,我仍然不喜欢它.
我的第一个想法是双重继承可以很好地解决这个问题,即使我同意双重继承通常是代码味道 - 但它会非常优雅地解决这个问题.那么,鉴于.NET不支持双继承,我从哪里开始呢? …
有没有人知道proc或脚本会在插入语句中生成任何行到同一个表中?
基本上,我想打电话
exec RowToInsertStatement 'dbo.user', 45;
Run Code Online (Sandbox Code Playgroud)
并输出以下代码
insert into dbo.MyTable( FirstName, LastName, Position)
values( 'John', 'MacIntyre', 'Software Consultant');
Run Code Online (Sandbox Code Playgroud)
我意识到我可以
insert into dbo.MyTable
select * from dbo.MyTable where id=45;
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用,因为ID列会抱怨(我希望它会抱怨)并且没有办法只覆盖那一列而不列出所有列,而在某些表中可能有数百个.
那么,有没有人知道会为我编写这个简单插入的proc?
编辑3:04:这样做的目的是让我可以复制一行,所以在生成INSERT之后,我可以将它修改成类似的东西
insert into dbo.MyTable( FirstName, LastName, Position)
values( 'Dave', 'Smith', 'Software Consultant');
Run Code Online (Sandbox Code Playgroud)
..没有明显这个人为的例子是如此简单它没有意义,但如果你有一个包含60列的表,而你需要的只是改变3或4个值,那么它就开始变得麻烦了.
那有意义吗?
我有一个超链接,我点击它时需要记录.
我创建了一个小型原型,通过创建一个新的MVC 2 Web应用程序项目可以重复该问题.
加
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
到Site.Master文件.
和
public ActionResult LogSomething()
{
string doNothing = DateTime.Now.ToString();
return new EmptyResult();
}
Run Code Online (Sandbox Code Playgroud)
到HomeController.cs文件
和
<p>
<a id="lnkTestPost" href="/home/about">Test Post</a>
<script type="text/javascript">
$("#lnkTestPost").click(function() {
$.post("/home/LogSomething");
});
</script>
</p>
Run Code Online (Sandbox Code Playgroud)
在Home/Index.aspx
在HomeController的LogSomething()操作方法中放置一个断点.
但是当我运行它时,有时断点被击中,有时则不然.
我假设由于实际链接将浏览器发送到另一个页面而没有被击中,但是在链接被触发之前不应该发布帖子?
无论如何我可以确保触发日志代码吗?
请注意; 在链接目标中添加日志记录功能不是一种选择.
编辑:原始超链接实际上是用户PC上安装的应用程序的自定义协议.所以这个链接就像"myapp:myArgs".不幸的是,为了简单起见,我没有提到这一点,因为没有一个答案真的适用于我,我现在认为有必要提一下.
我正在玩Azure asp.net开发.我使用Visual Studio 2010,Azure SDK,我是Azure云的新手.
我创建了几个应用程序并将它们部署到我的测试Azure网站.一切正常 - ASP.NET Web Page,ASP.NET MVC3,甚至是我之前创建的Azure SQL数据库的简单GridView绑定,我使用ADO.NET管理Microsoft SQL Management Studio.这很简单.
现在,我从一些教程中了解到,我需要使用Windows Azure云服务项目来确保我的应用程序能够正常运行.但它也没有这个项目.那么我在解决方案中究竟需要这样一个项目呢?
asp.net ×3
.net ×2
asp.net-mvc ×2
c# ×2
azure ×1
class ×1
deployment ×1
dry ×1
inheritance ×1
installer ×1
javascript ×1
jquery ×1
nuget ×1
oop ×1
powershell ×1
refactoring ×1
sql-server ×1