我有一个NHibernate Dao ..lets称它为MyClassDao因为想要一个更好的名字.
我正在编写以下代码.
MyClassDao myDao = new MyClassDao();
var values = myDao.GetByCriteria(Restrictions.Eq("Status", someStatusValue));
Run Code Online (Sandbox Code Playgroud)
我在单元测试中使用它来从数据库中提取值.然而,它接管了30秒的运行测试,过长在我看来...所以我想要做的是限制结果集拉回...说大约5的值.
在SQL中我会做类似以下的事情来实现这样的事情
set rowcount 5
select * from whatever_table
set rowcount 0
Run Code Online (Sandbox Code Playgroud)
有没有办法...不使用NHibernate查询语言来限制结果集的大小?
在过去的一年中,我的团队代码基础上有一些工作,我注意到命名约定的稳步发展.
例如,有很多类被命名为表达它们是一个可以帮助你做某事的类.
这是我发现的:
MyClassUtil
MyClassFactory
MyClassHelper
MyClassManager
MyClassService
Run Code Online (Sandbox Code Playgroud)
在我看来,随着时间的推移,人们会为相对相同的事情提出命名约定,因此您不必以一致的方式命名所有内容,而是使用具有一些约定的代码库.所有新东西都是根据最新的时尚命名惯例命名的,所以你几乎可以通过当时流行的惯例告诉一些代码的时代.
处理这种趋势的最佳方法是什么?这真的是个问题吗?随着这些命名时尚流行,人们应该使用最新的时尚吗?是否应该使用新的命名约定重命名所有现有项目?或者,人们应该接受这种多样性作为不可避免的东西?
让我自我介绍一下.
在过去的半年里,我开始做一些(小的)(自由职业)辅助项目,并且主要使用C#,因为它比MFC更"快速".但似乎这个市场上的网络项目比桌面项目更多.只要我不了解网站开发,我就感觉不舒服.
那么,我应该触摸为我提交的新网站,还是只关注桌面应用程序,但要了解更多信息,例如Python,或者像Qt或Boost这样的框架/库?
我在页面上定义了一个用户控件,如下所示:
<uc:MyUserControl ID="MyUserControl" runat="server" Visible="true" />
Run Code Online (Sandbox Code Playgroud)
我想在具有自定义属性的不同页面上重用相同的控件,如下所示:
<uc:MyUserControl ID="MyUserControl" runat="server" Visible="true"
MyCustomProperty="MyCustomText" />
Run Code Online (Sandbox Code Playgroud)
MyCustomProperty的目的是将MyUserControl中的某些文本控制为我指定的任何文本.
对于第一种情况,我希望文本是"查看",对于第二种情况,我希望它是"MyCustomText".
在我的用户控件中,我有以下代码来定义属性:
[DefaultValue("View")]
public string MyCustomProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)
我还有以下代码来更新基于属性的文本:
LinkButton buttonSelect = e.Item.FindControl("ButtonSelect") as LinkButton;
if(buttonSelect != null) buttonSelect.Text = MyCustomProperty;
Run Code Online (Sandbox Code Playgroud)
实际发生的情况是,在第一种情况下未提供自定义属性时,MyCustomProperty == null.
我试图通过添加DefaultValue属性来指定默认值应为"View",但它没有我想要的影响.
谁能发现我做错了什么?
拥有我所在公司的公司最近单方面决定salesforce.com和force.com平台是我们的目标.目前,我们是一家C#.NET商店,我们经常在日常工作中使用Visual Studio和Resharper.
我对这个决定并不满意,但是,就像任何优秀的开发者一样,我愿意给它一个机会并研究这项新技术,看看如果我被迫决定从一个过渡的话,会发生什么样的事情. NET到APEX开发人员.到目前为止,我必须承认不会对Force.com平台留下深刻的印象.公平地说,有些事情看起来很不错......但其他事情只是糟透了......只要看看他们关于什么构成良好的 单元测试的想法......幸运的是,这些错误是我可以避免的事实无论salesforce.com的文档背后的人多少,都要编写适当的单元测试....
然而,对于咆哮感到抱歉(我真的需要把它从我的胸口那里拿走),我发现的一件事,我知道我真正想念的是像Resharper这样的好的重构工具.作为一名.NET开发人员,Resharper可以做很多繁重的工作,否则我会犹豫不决.它还使得开发TDD样式变得更加容易,因为只需几次击键就可以轻松创建新的方法和属性.因此,我正在寻找可用于Eclipse和APEX编程语言的任何重构工具.我已经下载并安装了force.com开发者网站推荐的工具,但到目前为止,我看到很少有重构支持的方式.
有没有人知道是否存在与APEX编程语言一起使用的重构工具?
我已经使用 Fluent NHibernate 连接了一个商店和员工类,其中 Stores 可以有很多员工,如下所示:
public class Store
{
public virtual IList<Employee> Employees { get; set; }
//other store properties
}
public class Employee
{
public virtual Store Store { get; set; }
public virtual bool? SomeStatus1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我需要获取所有员工未将 SomeStatus1 设置为 true 的商店。
我在这里的成功尝试失败了:
Session.CreateCriteria(typeof(Store))
.Add(Restrictions.Not(Restrictions.Eq("Employees.SomeStatus1", true))
.List<Store>();
Run Code Online (Sandbox Code Playgroud)
知道我该怎么做吗?
我的尝试失败的原因是因为列表 Employees 没有 SomeStatus1 的属性......这是相当明显的。
我不知道的是如何让 NHibernate 只获得在我正在寻找的州有员工的商店......
我想我想问 NHibernate 是做一个加入......但我不知道如何要求它这样做......
我正在创建一个链表,我只想在列表的前面添加一个节点.我究竟做错了什么?
Node.h
#pragma once
namespace list_1
{
template <typename T>
struct Node
{
T data;
Node<T> *next;
// Constructor
// Postcondition:
Node<T> (T d);
};
template <typename T>
Node<T>::Node(T d)
{
data = d;
next = NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
list.h
template <typename T>
void list<T>::insert_front(const T& entry)
{
Node<T> *temp = head;
if(temp == NULL)
temp->next = new Node(entry);
else
{
while (temp->next != NULL)
{
temp = temp->next;
}
temp->next = new Node(entry);
}
}
Run Code Online (Sandbox Code Playgroud)
错误信息;
1>------ Build started: …Run Code Online (Sandbox Code Playgroud) 以前我曾询问过如何在数据集中插入一列.我现在有一个类似的问题......即将两列或多列合并为一列.
假设我有以下数据集:
DataSet ds = new DataSet();
ds.Tables.Add(new DataTable());
ds.Tables[0].Columns.Add("id", typeof(int));
ds.Tables[0].Columns.Add("firstname", typeof(string));
ds.Tables[0].Columns.Add("lastname", typeof(string));
Run Code Online (Sandbox Code Playgroud)
我需要将"firstname"和"lastname"列合并到一个名为"name"的列中.
我最好创建一个将两列合并在一起的方法,还是可以用来将多列合并在一起的更通用的方法?
我的想法是创建一个类似于以下的通用方法:
MergeColumns(字符串格式,字符串mergedColumn,DataTable dt,params string [] columnsToMerge)
用户提供如下格式:"{0} {1}"
mergedColumn是新列的名称...但它必须能够与将要合并的列之一相同,因为在我的真实案例中我将"name"和"given_names"合并为"name" ...但是如果我需要将"街道","城市","州","邮政编码"等合并到名为"地址"的列中,我仍然希望能够使用它.
我认为这将使用的方式如下:
MergeColumns("{0} {1}","name",dataTable,"firstname","lastname");
鉴于上述数据集,我希望结果数据集看起来如下:
DataSet ds = new DataSet();
ds.Tables.Add(new DataTable());
ds.Tables[0].Columns.Add("id", typeof(int));
ds.Tables[0].Columns.Add("name", typeof(string));
Run Code Online (Sandbox Code Playgroud)
这看起来像是一种合理的方法吗?这样的方法是否已经存在?我不想重新发明轮子.另外,我是否正在创建一种比我现在实际需要的更多的方法?
我没有很多工厂模式的经验,我遇到过一个我认为有必要的情况,但我不确定我是否已经正确实施了模式,我担心它的影响是什么我的单元测试的可读性.
我创建了一个代码片段,它近似(从内存中)我正在工作的场景的本质.我真的很感激,如果有人可以看看它,看看我做了什么似乎是合理的.
这是我需要测试的类:
public class SomeCalculator : ICalculateSomething
{
private readonly IReducerFactory reducerFactory;
private IReducer reducer;
public SomeCalculator(IReducerFactory reducerFactory)
{
this.reducerFactory = reducerFactory;
}
public SomeCalculator() : this(new ReducerFactory()){}
public decimal Calculate(SomeObject so)
{
reducer = reducerFactory.Create(so.CalculationMethod);
decimal calculatedAmount = so.Amount * so.Amount;
return reducer.Reduce(so, calculatedAmount);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是一些基本的界面定义......
public interface ICalculateSomething
{
decimal Calculate(SomeObject so);
}
public interface IReducerFactory
{
IReducer Create(CalculationMethod cm);
}
public interface IReducer
{
decimal Reduce(SomeObject so, decimal amount);
}
Run Code Online (Sandbox Code Playgroud)
这是我创建的工厂.我当前的要求让我添加了一个特定的Reducer MethodAReducer,用于特定场景,这就是为什么我要介绍一个工厂.
public class ReducerFactory …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个数据构建器,以便在我的单元测试中创建测试数据.我的数据构建器为所有属性创建默认值,以便使用它们的测试只需指定适用于测试的属性.
请考虑以下构建器:
public class CustomerBuilder
{
public int id = 0;
public Order order = new OrderBuilder().Build();
public CustomerBuilder WithId(int id)
{
this.id = id;
return this;
}
public CustomerBuilder WithOrder(Order order)
{
this.order = order;
return this;
}
public Customer Build()
{
return new Customer(id, order);
}
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,如果我需要在测试中创建一个客户,其中id对我很重要但订单无关紧要,我可以按如下方式创建对象:
Customer c = new CustomerBuilder()
.WithId(99)
.Build();
Run Code Online (Sandbox Code Playgroud)
这是一个好主意吗?或者,为什么不应该假设应该如何构建非原始属性?
c# ×5
nhibernate ×2
apex-code ×1
c#-3.0 ×1
c++ ×1
criteria ×1
dataset ×1
eclipse ×1
fad ×1
insert ×1
linked-list ×1
merge ×1
moq ×1
refactoring ×1
restriction ×1
resultset ×1
salesforce ×1
unit-testing ×1