您何时鼓励对接口进行编程而不是直接针对具体类?
我遵循的准则是在代码需要跨越逻辑/物理边界时创建抽象,尤其是涉及与基础架构相关的问题时.
另一个检查点是,由于可能存在额外的关注代码(例如缓存,事务感知,调用Web服务而不是进程内执行),或者此类依赖关系是否直接引用基础结构集成点,因此将来可能会更改依赖关系.
如果代码依赖于不需要控制来跨越逻辑/物理边界的东西,我或多或少都不创建抽象来与那些进行交互.
我错过了什么吗?
我有以下代码,如果我最后使用conn == null,我仍然使用连接池?我知道关闭连接是一个好习惯但是如何处理整个连接对象?
public void ExecuteNonQuery(SqlCommand Cmd)
{
//========== Connection ==========//
SqlConnection Conn = new SqlConnection(strConStr);
try
{
//========== Open Connection ==========//
Conn.Open();
//========== Execute Command ==========//
Cmd.Connection = Conn;
Cmd.CommandTimeout = 180;
Cmd.ExecuteNonQuery();
}
catch (Exception Exc)
{
throw Exc;
}
finally
{
//======== Closing Connection ========//
if (Conn.State == ConnectionState.Open)
{ Conn.Close(); }
//======== Disposing object ========//
Conn = null;
}
}
Run Code Online (Sandbox Code Playgroud) 我知道IE中的jquery/ajax是一个常见问题.关于堆栈溢出,这里有很多很棒的建议,但它们对我来说都没有用.下面的代码在firefox中运行得很好,但在IE中却没有:
$.ajaxSetup({ cache: false })
$.ajax({
url: 'FunDataService.asmx/' + funDataMethod,
type: 'POST', dataType: 'html', cache: false, timeout: 3000,
error: function() {alert('Error updating fun information. Refresh the page and try again.');},
success: function(htmlFunInfo) {
alert($(htmlFunInfo).text());
$("#fundiv").html($(htmlFunInfo).text())},
data: parameters
});
Run Code Online (Sandbox Code Playgroud)
你可以看到我的反缓存尝试 ; 我还在URL中添加了随机值.我也尝试在Web服务上添加各种内容标题:
' Context.Response.ContentType = "text/html; charset=utf-8"
' Context.Response.ContentType = "text/html"
Context.Response.ContentType = "text/plain"
Run Code Online (Sandbox Code Playgroud)
alert命令当然是用于调试的.在FF中,$(htmlFunInfo).text()是从我希望插入的服务器发送的div标签.在IE中,它是空字符串.
有谁知道如何在IE中访问此字符串值?谢谢!
编辑 服务器的响应如下:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="tempuri.org/">
<div>stuff</div>
<div>more stuff</div>
</string>
Run Code Online (Sandbox Code Playgroud)
我越来越认为这是错的,我需要避免绕过div.
编辑2 就是这样!在我的服务器代码中,我替换了:
Return RemarkHtml
Run Code Online (Sandbox Code Playgroud)
同
Context.Response.Write(RemarkHtml)
Run Code Online (Sandbox Code Playgroud)
这避免了div周围的标签,现在我很好.尽管如此,我认为这是一个很大的问题,在IE中,你无法使用.text()获取标签的内容.
多谢你们!
我只是想知道从课堂上找回读者的正确方法?
我的代码可以使用,但我不确定这是否正确.
也.我无法关闭我的类方法中的连接,仍然可以从我的ascx页面访问它,是
那好吗?
//在我的班级中,我有以下方法来返回记录/阅读器 - 在这种情况下它是一条记录.
public SqlDataReader GetPost()
{
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("con_spPost", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@blogid", blogid);
try
{
conn.Open();
return cmd.ExecuteReader();
}
finally
{
// conn.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
//然后我在ascx页面中调用GetPost方法,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
//instantiate our class
MyClass DB = new MyClass();
//pass in the id of the post we want to view
DB.PostID = Int32.Parse(Request.QueryString["p"]);
///call our GetPost method
SqlDataReader reader = DB.GetPost();
//output the result …Run Code Online (Sandbox Code Playgroud) 使用接口是一种非常简单的方法来删除依赖项,但是当您的某个类需要一个未由接口定义的方法时会发生什么?如果您正在使用构造函数注入或工厂,那么如何在不进行转换的情况下访问该额外方法?这可能吗?
这是一个有这个问题的工厂的例子.我想做一些不可能的事吗?谢谢你的帮助.
interface IFoo {
int X { get; set; }
int Y { get; set; }
}
public class A : IFoo {
int X { get; set; }
int Y { get; set; }
}
public class B : IFoo {
int X { get; set; }
int Y { get; set; }
int Z { get; set; }
}
public static class FooFactory {
public static IFoo GetFoo(string AorB) {
IFoo result = null;
switch (AorB) { …Run Code Online (Sandbox Code Playgroud) 我最近一直在阅读很多关于设计模式的内容,其中一些可以让我们的生活变得更加轻松,其中一些似乎只会让事情复杂化(至少对我来说是这样).我很想知道每个人都认为什么样的设计模式被淹没或被低估了.有些模式很简单,许多人甚至没有意识到他们正在使用模式(装饰器可能是最常用的,没有实现).我的目标是给我们模式新手一些更复杂或未知的模式以及为什么要使用它们.
我对IE7与Firefox/Chrome/Opera中无序列表的垂直空间量持续存在问题,我似乎无法找到解决方案.
在IE7中,空间较小,我想看到的.
在Firefox,Chrome和Opera中,它们之间的空间大约是两倍.
我无法解释我的代码或页面中的任何间距问题.在我的页面上,代码如下所示:
<!--BEGIN SIDEBOX-->
<div id="sidebox_new">
<div id="sidebox_top"><div id="sup">SUPPORT LINKS</div></div>
<div id="sidebox_bod">
<br />
<ul>
<li><a href="training.aspx">User Training</a></li><br /><br />
<li><a href="faqs.aspx">FAQ</a></li><br /><br />
<li><a href="logonasst.aspx">Logon Assist. Center</a></li><br /><br />
<li><a href="faxus.aspx">Fax Us</a></li><br /><br />
<li><a href="callus.aspx">Call Us</a></li><br /><br />
<li><a href="feedback.aspx">General Feedback</a></li>
</ul>
</div>
<div id="sidebox_btm"></div>
</div>
<!--END SIDEBOX-->
Run Code Online (Sandbox Code Playgroud)
我这个部分的CSS看起来像这样:
#sidebox_bod
{
width: 200px;
margin: 0 30px 0 0;
padding: 0;
background: url('../img/supbxbod.gif');
background-repeat:repeat-y;
background-position:bottom;
}
#sidebox_bod ul
{
list-style-image:url('../triangle.gif');
text-align:left;
padding: 0 0 0 30px;
margin: …Run Code Online (Sandbox Code Playgroud) 谁能解释为什么原始地址XElement街道节点会发生变化?看起来customer1持有对地址XElement的引用,但customer2和customer3已经获得了副本.
为什么原始地址会发生变化?(LINQPad示例)
var address =
new XElement ("address",
new XElement ("street", "Lawley St"),
new XElement ("town", "North Beach")
);
var customer1 = new XElement ("customer1", address);
var customer2 = new XElement ("customer2", address);
var customer3 = new XElement ("customer3", address);
customer1.Element ("address").Element ("street").Value = "Another St";
Console.WriteLine (customer2.Element ("address").Element ("street").Value);
Console.WriteLine ();
address.Dump();
Console.WriteLine ();
customer1.Dump();
Console.WriteLine ();
customer2.Dump();
Console.WriteLine ();
customer3.Dump();
Run Code Online (Sandbox Code Playgroud)
Lawley St
<address>
<street>Another St</street>
<town>North Beach</town>
</address>
<customer1>
<address>
<street>Another St</street>
<town>North Beach</town>
</address>
</customer1>
<customer2> …Run Code Online (Sandbox Code Playgroud) 有没有办法用变量名称调用Visual Basic(.net)中的过程?
例如,变量strColour可以是10个预定义值之一,绿色蓝色黑色白色红色粉红色橙色黄色靛蓝色.如何处理每一个都在它自己的Sub Routine,colgreen,colblue,colblack等.
我可以使用一堆if..then..else和select case,但我想拥有的东西就像VBA Excel的Run"col"和strColour
可能吗?
这两者有什么区别?它们乍一看似乎具有相同的功能.哪一个具有更快的性能,哪一个更容易使用?