【Translation】接口 vs. 实体类

在设计.net程序架构的时候,我更倾向于使用接口而不是实体类在作为函数的参数。

我们来看看下面这个例子:

第一个方法public IList<Article> Get(),他调用数据库,并得到一个包含了查询结果数据集合的SqlDataReader,然后调用第二个方法private IList<Article> FillArticles(SqlDataReader reader)的将SqlDataReader中的结果添加到IList<Article>中。

 

public  IList < Article >  Get()
{
    SqlConnection connection 
=   new  SqlConnection(_connectionString);
    SqlCommand command 
=   new  SqlCommand();
    command.Connection 
=  connection;
    command.CommandType 
=  CommandType.StoredProcedure;
    command.CommandText 
=   " GetAllArticles " ;
 
    SqlDataReader reader 
=  command.ExecuteReader(CommandBehavior.SingleResult);
 
    
return  FillArticles(reader);
}

 

 

private  IList < Article >  FillArticles(SqlDataReader reader)
{
    List
< Article >  articles  =   new  List < Article > ();
    
while  (reader.Read())
    {
        Article article 
=   new  Article();
        article.ArticleID 
=  ( int )reader[ " ArticleID " ];
        article.Title 
=  reader[ " Title " ];
        article.Body 
=  reader[ " Body " ];
        article.Published 
=  (DateTime)reader[ " Published " ];
        articles.Add(article);
    }
    
return  articles;
}

通过上面这个例子你可以发现,FillArticles方法需要一个SqlDataReader (这是一个实体类)。好,现在需求变了,现在数据都存储在了XML文件中,这个时候,我们得到就是XmlDataReader实际没有这个类型)而不是SqlDataReader了。很不幸,你唯一能做的就是修改这块的源代码。

 

那么,我们怎么样才能避免这样的问题呢?我们假设SqlDataReaderXmlDataReader都实现了IDataReader接口。我们只需要把代码修改成如下的样子即可解决开始遇到的问题了:

 

 

private  IList < Article >  FillArticles(IDataReader reader)
ExpandedBlockStart.gifContractedBlock.gif
{
    List
<Article> articles = new List<Article>();
    
while (reader.Read())
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        Article article 
= new Article();
        article.ArticleID 
= (int)reader["ArticleID"];
        article.Title 
= reader["Title"];
        article.Body 
= reader["Body"];
        article.Published 
= (DateTime)reader["Published"];
        articles.Add(article);
    }

    
return articles;
}

 

这就是使用接口作为方法的参数,还不使用实体类的好处;)

 

原文

 

 

 

### 回答1: translation.crx 是一个文件的扩展名,通常用于谷歌浏览器的翻译插件。CRX 是 Chrome Extension 的缩写,表示谷歌浏览器的扩展程序。这个文件可以在谷歌商店或其他网站上下载,然后通过谷歌浏览器的扩展程序安装。 translation.crx 提供了翻译功能,它可以在浏览器中方便地进行翻译操作。一旦安装并启用了这个插件,用户可以选择要翻译的文本或网页,然后通过点击插件图标,选择目标语言进行翻译。这个插件可以翻译多种语言,包括但不限于英语、法语、德语、西班牙语、中文等。用户只需下载并安装这个插件,就可以方便地进行翻译,提高阅读和理解外文的便利性。 总之,translation.crx 是用于谷歌浏览器的翻译插件,它可以帮助用户方便地进行文本或网页的翻译,提高阅读理解外文的效率。此插件对于需要频繁翻译的用户来说非常实用,并能在跨语言交流、学习外语等场景中发挥重要作用。 ### 回答2: translation.crx是一种文件扩展名,用于Google Chrome浏览器中的翻译插件。这个插件主要用于在线页面的翻译功能。当用户安装这个插件后,它会在浏览器的工具栏上显示一个小图标。当用户访问一个非用户所使用的语言编写的网页时,他们可以点击这个图标,插件会自动检测页面上的文字,并将其翻译成用户所设置的首选语言。 该插件支持多种语言之间的翻译,包括英语、中文、法语、德语、日语等。用户可以在插件的设置中选择需要的语言。 翻译过程是通过联网实现的,插件会将要翻译的文字发送给Google的翻译服务,然后接收到翻译后的结果,并在页面上显示出来。用户也可以选择将翻译结果复制到剪贴板,以便粘贴到其他地方使用。 这个插件对于用户来说非常方便实用,特别是当需要阅读或理解其他语言的内容时。它帮助用户突破语言障碍,使他们能够更好地互动和获取信息。 总结来说,translation.crx是一款适用于Google Chrome浏览器的翻译插件,可以帮助用户翻译网页上的文字。它简单易用,对于解决语言障碍问题非常有帮助。 ### 回答3: translation.crx是一种谷歌浏览器扩展文件的后缀名。这种文件通常是用于安装在谷歌浏览器中,并提供浏览器翻译功能的插件。这种插件可以帮助用户翻译网页上的文本内容,使用户在浏览外语网页时更方便地理解内容。当用户安装了translation.crx文件,他们可以通过简单的点击扩展图标或右键点击网页上的文本内容来启动翻译功能。这使得用户无需离开当前网页就能够轻松地获取翻译结果。 很多人在学习外语或者在浏览非母语网站时会用到这种翻译插件。它可以为用户提供及时且便捷的翻译服务,从而解决了跨语言的沟通障碍。无论是在学术研究、工作项目或者是日常生活中,translation.crx都能提供帮助。 然而,需要注意的是,翻译插件并非完全准确,特别是当面对特定的语言、术语或者口语化的表达时。因此,在使用translation.crx时,用户需要仔细对翻译结果进行核对和验证,以确保准确性。 总而言之,translation.crx是一个用于安装在谷歌浏览器中的翻译插件文件。它提供了便捷的翻译功能,方便用户在浏览器中获取外语网页的翻译结果。但在使用时,用户需要谨慎核对翻译结果,以免出现错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值