小编Way*_*ina的帖子

有关.NET ORM学习的一些建议

我有点惭愧地说我从未使用过ORM; 你可能还记得我的大部分职业经历都是使用经典ASP和小.NET进行攻击,而我只是维护.

为了我自己的职业生涯以及为工作中的新项目做准备(最终在.NET中完成!)我正在考虑在我的技能组中添加一个ORM - 作为受虐狂我是我也会看TDD而我正忙于这个项目.

无论如何,我使用.NET 3.5作为项目(或计划,反正)所以我试图决定我想要选择什么ORM; 就像我说我对它们并不熟悉,但我一般都知道它们应该做什么,以及它们是如何做到的.我的选择基本上取决于NHibernate或LINQ/Entity Framework.我没有使用过任何东西,但我看过一些LINQ2SQL和NHibernate的演示.

NHibernate看起来总体上更健壮(Linq2Sql甚至不是"真正的"ORM)以及在ALT.NET社区中大量使用,我想要更多地探索它.但是,EF是微软的产品,因此,大多数开发团队都会大量使用EF,他们只使用微软推出的任何产品,而不会考虑任何其他选择.

我已经听说了关于EF的好事和坏事,但是如果/当我在一个真正的开发团队的公司找到一份更好的工作时,我想选择能给我一个良好基础的东西以及对其他雇主好看的东西.

编辑:我应该补充一点,如果在选择ORM时有任何问题,应用程序将不得不处理现有的数据库.

编辑(02/15/2009 6:48 PM):它将使用的唯一数据库是SQL Server 2005 Standard,在Windows Server 2003上运行.鉴于这是一个工作项目,我的目标是选择一些赢得的东西我需要很长时间才能加快速度(因为我需要提高工作效率并且"学习新工具"对管理来说看起来不太好)但是比滚动我自己的DAL要好一些.当时我还没有确定应用程序是智能客户端还是ASP.NET应用程序,但其中的一部分很可能是用ASP.NET MVC完成的.

.net linq nhibernate orm

7
推荐指数
1
解决办法
1569
查看次数

在数据库列中,您更喜欢详细命名吗?

你最喜欢哪个?

假设我们有一个通用的Product表,它有一个ID,一个名称和一个类别的外键引用.您是否愿意将您的桌子命名为:

CREATE TABLE Products
(
    ProductID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    CategoryID int NOT NULL FOREIGN KEY REFERENCES Categories(CategoryID),
    ProductName varchar(200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

使用列的显式命名(例如产品名称,产品 ID)或类似的东西:

CREATE TABLE Products
(
    ID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    CategoryID int NOT NULL FOREIGN KEY REFERENCES Categories(ID),
    Name varchar(200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

从我所看到的,.NET世界中的约定是明确的 - 样本倾向于使用第一个示例,而开源和RoR世界倾向于第二个示例.就个人而言,我发现第一眼看上去更容易阅读和理解: select p.ProductID, p.ProductName, c.CategoryName from Categories c inner join Products p on c.CategoryID = p.CategoryID对我来说似乎比自然更自然select p.ID AS ProductID, p.Name AS …

sql database-design naming naming-conventions

6
推荐指数
2
解决办法
3212
查看次数

您对使用Rails脚手架生成器的想法

我正在尝试学习Ruby on Rails.虽然我只了解基础知识,但我对基础知识和编写自己的模型,控制器和视图非常有信心.

最近我发现,当我开始一个新的应用程序时,我的大多数模型很好地融入了REST哲学,而我最终只是手工编写大部分相同的脚手架生成的代码.在这种情况下,您认为从script/generate scaffold我的每个必需模型开始使用,然后根据需要修改代码是否可以接受?我见过的流行观点似乎是脚手架是一个"新手技巧"而且真正的开发人员不使用它,但对于大多数应用程序来说,它似乎创造了一大堆可用的代码(而不是坏代码) .

你的想法是什么?

ruby-on-rails

6
推荐指数
2
解决办法
937
查看次数

如何在Rails测试中伪造子域查找?

我定义了以下过滤器:

# application_controller.rb
class ApplicationController < ActionController::Base
  before_filter :find_account

  private

    def find_account
      @current_account = Account.find_by_subdomain!(request.subdomains.first)
    end
end
Run Code Online (Sandbox Code Playgroud)

在我的测试中:

# users_controller_test.rb
class UsersControllerTest < ActionController::TestCase
  setup do
    @request.host = "test.myapp.local"
  end
  # ...
end
Run Code Online (Sandbox Code Playgroud)

现在test被定义为我在使用所有请求之前加载的虚拟帐户的子域factory_girl.但是,这是抛出一个零对象错误,说@request是零.删除设置块会导致我的所有测试失败,因为find_account找不到帐户,因此会抛出RecordNotFound错误.

我究竟做错了什么?

testing ruby-on-rails functional-testing

6
推荐指数
1
解决办法
862
查看次数

常见的扩展方法属于哪个项目层?

我很好奇应用程序的全局系统常见扩展的"层"属于什么.例如,我可能有扩展,让我使用类似Rails的"DaysAgo","MonthsAgo"等类型的扩展整数方法.这通常属于哪个项目层?我在考虑基础设施,但这似乎意味着与数据库相关(例如基础存储库和数据访问).我有一个"核心"库项目,所以也许它属于那里?

我知道您希望对与特定类组相关的扩展进行分组,但这些扩展主要用于整个应用程序.在扩展方法之前的几天,它们将处于Utilities静态类等中,那么它们现在应该在哪里生活?

c# architecture

6
推荐指数
1
解决办法
539
查看次数

App.config:appSettings"file"属性不是从Local.config中读取的

我有一个测试项目,其中App.config设置了一些设置的默认值.我想在本地级别覆盖这些设置,以便每个开发人员可以使用自己的凭据.

在我的App.config中,我有以下内容:

<appSettings file="Local.config">
    <add key="Username" value="USERNAME"/>
    <add key="Password" value="PASSWORD"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

在Local.config(在同一目录中)我有以下内容:

<appSettings>
    <add key="Username" value="wayne"/>
    <add key="Password" value="secret"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

当我运行我的测试时,我希望获取Username的值将从Local.config返回"wayne"; 相反,它是来自App.config的"USERNAME" - 似乎它实际上并没有检测到我想覆盖另一个文件中的设置.

我究竟做错了什么?

c# app-config

6
推荐指数
1
解决办法
2672
查看次数

ASP.NET中基于帐户的查找

我正在考虑将ASP.NET用于新的SaaS服务,但是为了爱我,我似乎无法弄清楚如何根据大多数SaaS应用程序(例如37Signals)这样的子域进行帐户查找.

例如,如果我提供yourname.mysite.com,那么我如何使用ASP.NET(专门用于MVC)来提取子域,以便我可以加载正确的模板(显示公司名称等)?可以通过常规路由完成吗?

这似乎是SaaS中的常见问题,因此必须有一种简单的方法在ASP.NET中执行此操作; 我知道有些插件可以用于其他框架,比如Ruby on Rails.

asp.net-mvc saas

5
推荐指数
1
解决办法
621
查看次数

如何在Asp.Net Mvc中进行Basecamp风格的账户?

对于Asp.Net软件作为服务应用程序,我想做基于帐户的子域,如Basecamp和其他37Signals产品.例如,acme.myapp.com将为该客户加载该帐户并仅撤回其信息.

这在Ruby on Rails中很容易实现,但是如何在ASP.NET MVC中处理这个功能并且能够扩展到可能数百个帐户?

asp.net asp.net-mvc saas multi-tenant

5
推荐指数
1
解决办法
1263
查看次数

使用备用视图引擎有什么好处?

我正在玩ASP.NET MVC,我发现有一些替代视图引擎可供它使用,例如NHaml和Spark.我的问题是你为什么要使用备用视图引擎?有这样的事情,我认为没有好处:

<ul if="products.Any()">
    <li each="var p in products">${p.Name}</li>
</ul>
<else>
    <p>No products available</p>
</else>
Run Code Online (Sandbox Code Playgroud)

使用Spark视图引擎(从那以后,我没有使用Spark来验证这一点并且可能完全错误,因为你将代码作为字符串传递,所以你不会得到Intellisense)和:

<% if products.Any() { %>
    <ul>
      <% foreach (var p in products) { %>
        <li><%= p.Name %></li>
      <% } %>  
    </ul>
<% } else { %>
    <p>No products available</p>
<% } %>
Run Code Online (Sandbox Code Playgroud)

使用内置的ASP.NET MVC模板格式(虽然我承认悬挂的大括号非常难看).有没有合理的理由除了不喜欢"gator"标签(或悬挂花括号)以考虑使用备用视图引擎?或者它是否很酷,因为它是新的东西?

asp.net-mvc viewengine spark-view-engine

5
推荐指数
1
解决办法
597
查看次数

重构ASP.NET 2.0应用程序更"现代"

这是一个假设的情景.假设您刚刚在一家拥有小型开发团队的公司工作过.该公司使用.NET 2.0编写的内部CRM/ERP类型系统来管理所有日常事务(让我们简化并说出客户帐户和记录).该应用程序是在几年前编写的,当时.NET 2.0刚刚推出并使用以下架构设计:

  • Web表单
  • 数据层是围绕调用存储过程的SqlCommand的瘦包装器
  • 通过sprocs填充的基本DTO样式的业务对象
  • 一个"业务逻辑"层,充当webform和数据库之间的网关(即调用该层后面的代码)

让我们说,随着应用程序中添加了更多更改和要求,您开始觉得旧架构正在显示其年龄,并且变更越来越难以实现.您将如何引入重构步骤A)使应用程序现代化(即正确分离关注点)和B)确保应用程序能够轻松适应组织中的变化?

国际海事组织的变化将涉及:

  • 将Linq等ORM引入Sql并删除CRUD的sprocs
  • 假设您不能抛弃Webforms,请将MVP模式引入表单
  • 确保网关类符合SRP和其他SOLID原则.
  • 将重用的逻辑更改为Web服务方法,而不必重用代码

你的想法是什么?同样,这是一个完全假设的情景,我们许多人过去曾面临这种情况,或者可能最终面临.

asp.net refactoring

5
推荐指数
1
解决办法
317
查看次数