English 中文(简体)
在网络应用中使用静态方法的好处
原标题:Benefit of using static methods in web application
  • 时间:2011-09-07 17:51:13
  •  标签:
  • c#
  • asp.net

我在一个习俗基类中注意到,我们用于我们许多网页,我们有一些固定的方法。 由于这一类别正被用作网页的基级,因此它会使方法静态? 我不认为是没有,而是希望进行核查。

Also in custom base class we have properties that call other static methods in a manager class of ours in another class library and returns either a DataTable or HashTable. I can see where as a convenience factor for devs to code against but other than that is their any reason for making the methods static in there as well?

因此,现行法典认为:

public class CustomBaseClass
    protected Hashtable displayText
        {
            get{
                if(_displayText == null)
                    displayText = MyManager.GetCustomersList(sCustID);

since GetCustomersList is static every method inside this method has to be static as well. All the way down to our data access layer. Just seems odd to me coding it this way but was curious as to what you all thought.

我们的老发展者们把我们的申请编成法典,他们全都使用。 他们是否对使用静态方法,特别是在 as网口使用静态方法表示任何负面或 watch?

如果我制造一个更有意义的单一吨吨位,那么我就不必把所有方法打上我们的DAL静态? lo

最佳回答

采用固定方法的主要原因是,这种方法并不取决于哪类成员。 避免需要为这几类人设立一个新案例,以使用这种方法,然后需要以后收集垃圾。

静态和典型方法显然都有其位置。 通常,我为通用方法制定静态方法,使其所有的国家都来自静态成员(尽管你当然要同步)或参数,或为所有类别设定一个全级财产。

你可以使用一个单一州(尽管有些民俗会对他们抱有仇恨),或者说,你只能拥有最高等级的德国、德国、德国、德国、德国、德国、德国、德国、德国、意大利、日本、意大利、挪威、波兰、葡萄牙、葡萄牙、罗马尼亚、西班牙、瑞典、瑞典、瑞士、瑞典、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞士、瑞典、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士

采用静态方法的主要问题是,虽然对静态方法进行单独测试非常容易,但将通话结果改变为静态的多功能小分辨率。 如果它举动的话,它会更容易 mo。

问题回答

在网络应用(以及这一问题)中标出“<编码>static的唯一理由就是,在所有请求线上加以共享并保持记忆。 这意味着,如果两项请求同时处理,而且每项请求都试图确定静态数据,那么你就有一个种族条件(并可能出现问题)。

在你的具体情况下,它似乎是“你”的制定者;没有任何理由,它必须是静态的(根据所提供的样本)。

采用

基本上,在莫诺州模式中,你通过对所有静态成员进行私人标识,并提供一个公开的总结,给你定级或单一州提供普通类的语种。 这为躲藏执行细节提供了一种途径,因此,该类人员即时使用,就像个别案件被分配到肥皂上一样。

独一无二的是:

  • <>Consistent Semantics. 消费者使用单一国家,就像任何其他类别一样。

  • Implementation Hiding. With the implementation hidden — fact that the class is static or a singleton — if and when, down the line, the class implementation needs to change, the change is limited to just the source file implementing the class. Consumers of the class are unaware of the change.

    如果没有单一国家,在班级实施发生变化时,班级的每名消费者必须同时改变对班级或成员的每一次提及,很可能是分散在许多项目中的大量源文档。

在这里,一个静态阶级作为莫诺斯塔邦的典型例子。

public class MyMonostateClass
{
  #region internal, static implementation

  private static string dataItem;

  private static int someMethod( int foo )
  {
    return 0 ; // do something useful return the appropriate value
  }

  #endregion internal, static implementation

  #region public instance implementation wrappers

  public string DataItem
  {
    get { return dataItem; }
    set { dataItem = value; }
  }

  public int SomeMethod( int foo )
  {
    return MyMonostateClass.someMethod(foo);
  }

  #endregion public instance implementation wrappers

  public MyMonostateClass()
  {
    return ;
  }

}

和单一州之一:

public class MyMonostateSingletonList : IList<int>
{
  private static readonly IList<int> instance = new List<int>() ;

  public MyMonostateSingletonList()
  {
    return ;
  }
  public int IndexOf( int item )
  {
    return instance.IndexOf(item) ;
  }
  public void Insert( int index , int item )
  {
    instance.Insert( index , item ) ;
  }
  public void RemoveAt( int index )
  {
    instance.RemoveAt( index ) ;
  }
  public int this[int index]
  {
    get
    {
      return instance[index] ;
    }
    set
    {
      instance[index] = value ;
    }
  }
  public void Add( int item )
  {
    instance.Add(item) ;
  }
  public void Clear()
  {
    instance.Clear() ;
  }
  public bool Contains( int item )
  {
    return instance.Contains(item) ;
  }
  public void CopyTo( int[] array , int arrayIndex )
  {
    instance.CopyTo( array , arrayIndex ) ;
  }
  public int Count
  {
    get { return instance.Count ; }
  }
  public bool IsReadOnly
  {
    get { return instance.IsReadOnly ; }
  }
  public bool Remove( int item )
  {
    return instance.Remove(item);
  }
  public IEnumerator<int> GetEnumerator()
  {
    return instance.GetEnumerator() ;
  }
  System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
  {
    return instance.GetEnumerator() ;
  }
}

我要说的是,没有任何好处或不利之处,但这取决于你是否选择静态方法的要求。 设想如下:

  • You should not use static class/members/methods: In general cases, for example - If you need to store and fetch user access information.
  • You should use static methods: If you need to implement some utility methods like sending email, logging error, getting value from web.config, getting ip address of client side.

每当你写一个职务或宣布一个变数时,在你制造一个阶级标语之前,它就没有创造记忆。 但是,如果你宣布任何功能或变体不变,就会直接在全球产生记忆和行为。 静态变压器没有提及任何物体。

I 希望这将有助于。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Transaction handling with TransactionScope

I am implementing Transaction using TransactionScope with the help this MSDN article http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx I just want to confirm that is ...

System.Web.Mvc.Controller Initialize

i have the following base controller... public class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (...

Microsoft.Contracts namespace

For what it is necessary Microsoft.Contracts namespace in asp.net? I mean, in what cases I could write using Microsoft.Contracts;?

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!

热门标签