我们正在开发ASP.NET MVC应用程序,现在正在构建存储库/服务类.我想知道创建一个所有存储库实现的通用IRepository接口是否有任何重大优势,而每个存储库都有自己独特的接口和方法集.
例如:一个通用的IRepository接口可能看起来像(取自这个答案):
public interface IRepository : IDisposable
{
T[] GetAll<T>();
T[] GetAll<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter, List<Expression<Func<T, object>>> subSelectors);
void Delete<T>(T entity);
void Add<T>(T entity);
int SaveChanges();
DbTransaction BeginTransaction();
}
Run Code Online (Sandbox Code Playgroud)
每个Repository都会实现此接口,例如:
我们在之前的项目中遵循的备选方案是:
public interface IInvoiceRepository : IDisposable
{
EntityCollection<InvoiceEntity> GetAllInvoices(int accountId);
EntityCollection<InvoiceEntity> GetAllInvoices(DateTime theDate);
InvoiceEntity GetSingleInvoice(int id, bool doFetchRelated);
InvoiceEntity GetSingleInvoice(DateTime invoiceDate, int accountId); //unique
InvoiceEntity CreateInvoice();
InvoiceLineEntity CreateInvoiceLine();
void SaveChanges(InvoiceEntity); //handles inserts or updates
void DeleteInvoice(InvoiceEntity);
void …Run Code Online (Sandbox Code Playgroud) 有没有快速的方法来查找接口的方法/属性/等的所有实现,而不是引用?这是一些示例代码:
public class SomeClass : IBaseClass
{
public Int32 GetInt()
{
return 1;
}
}
public interface IBaseClass
{
public Int32 GetInt();
}
public class SomeOtherClass
{
IBaseClass _someClass;
private TestMethod()
{
_someClass = new SomeClass();
_someClass.GetInt();
}
}
Run Code Online (Sandbox Code Playgroud)
我想在查看SomeOtherClass.TestMethod()时快速访问SomeClass.GetInt().如果我右键单击_someClass.GetInt()并单击"Go To Definition",它会将我带到界面.如果我单击"查找所有引用",我可能会看到所有用途的列表......而不仅仅是实现GetInt()方法的类.
有没有更快的方法来找到它?其他开发者的任何提示?我们正在使用DI来处理大多数依赖项,这意味着通过深层嵌套代码进行跟踪需要永远.
我们正在ASP.NET MVC中构建一个相当大的HR应用程序,到目前为止我们的控制器变得非常庞大.例如,我们有一个Employee控制器,包括所有员工视图(个人信息,员工扣除,家属等).这些视图中的每一个都可能有多个动作或子视图(例如CRUD).每个动作都相对较小,但控制器可能有许多功能.
是否存在拆分控制器的最佳实践?而不是拥有带有几十个视图的Employee控制器,对每个子类型(即EmployeePersonalInfoController,EmployeeDeductionController,EmployeeDependentController)是否更好一个控制器?
最后,它甚至重要吗?
更新澄清
我最初担心的是CRUD的行为.例如,让我们考虑创建和删除...
EmployeeController中的当前操作:
CreateEmployee()
DeleteEmployee()
CreateEmployeeDeduction()
DeleteEmployeeDeduction()
CreateDependent()
DeleteDependent()
etc.
Run Code Online (Sandbox Code Playgroud)
如果控制器被拆分:
EmployeeController
Create()
Delete()
EmployeeDeductionController
Create()
Delete()
EmployeeDependentController
Create()
Delete()
EmployeeBenefitController
Create()
Delete()
etc.
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,我们的~100个屏幕被分成8-10个大型控制器.在第二个,我可能有~50个控制器.
我们正在寻找一个ASP.NET兼容的数据网格,允许类似于Excel或WinForms数据网格的多行编辑.它还必须支持非常基本的键盘输入(标签,箭头键,返回).请注意,我们不是在寻找Excel功能(功能,格式,公式)......只是一个快速数据输入的网格.
我看过Telerik,Infragistics,ComponentOne,DevExpress以及其他许多人......他们所有的支持团队都表示控制要么不支持多线,要么以如此笨重的方式进行控制,以至于它无法使用.
有没有人使用过他们可以推荐的类似Excel的网格?客户端网格似乎更接近我们所需要的,Sigma Widgets(示例)是我迄今为止发现的最接近的网格.Extjs的网格太不灵活了,jQuery网格太多了.
如果点出现在MIME编码行的开头(例如test.com有时显示为test..com),.NET的SmtpClient似乎正在创建主机名中带有额外点的电子邮件.示例代码:
[TestMethod]
public void TestEmailIssue()
{
var mail = new System.Net.Mail.MailMessage();
var smtpClient = new System.Net.Mail.SmtpClient();
mail.To.Add("Test@test.com");
mail.Subject = "Test";
mail.From = new System.Net.Mail.MailAddress("test@test.com");
mail.Body = "Hello this is a short test of the issue:"
+" <a href='https://test.com/'>https://test.com/</a>: ";
smtpClient.PickupDirectoryLocation = "C:\\temp\\";
smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory;
smtpClient.Send(mail);
}
Run Code Online (Sandbox Code Playgroud)
这会创建一个如下所示的.eml文件:
X-Sender:test@test.com
X-Receiver:Test@test.com
MIME版本:1.0
来自:test@test.com
致:Test@test.com
日期:2011年7月6日15:55:28 -0400
主题:测试
内容类型:text/plain; 字符集= US-ASCII
Content-Transfer-Encoding:quoted-printable
您好,这是对该问题的简短测试:https:// test =
..com /'> https://test.com/:= 20
当发送文件,或开口在Outlook(或任何其他程序),双点显示(即test..com).请注意,如果我删除了额外的空格(在"是"中),则test.com会正确显示,因为该点不再出现在行的开头.
这在尝试发送网站地址时会出现问题,我们会收到来自客户的电话,说他们无法点击我们的链接.
还有其他人经历过这个吗?除了编写自己的编码之外,我们如何解决这个问题呢?
我们即将开始大型企业应用程序.我正在认真考虑使用ASP.NET MVC,因为:
我的团队只使用PHP进行Web开发,但对.NET winforms非常有经验(所以无论哪种方式我们都有学习曲线).我担心的是有些人对ASP.NET MVC对大型应用程序的可扩展性表示担忧.但是从我读到的内容来看,webforms也有自己的问题.
我应该重新考虑webforms,还是坚持我的直觉并使用ASP.NET MVC?
有关:
我的团队经常将TODO这个词放在未完成的代码段中.有没有办法将用户指定的关键字添加到Visual Studio中,以便以某种方式突出显示这些关键字?例如,在vim中,单词TODO会自动突出显示.
例如,我想看到这样的事情:
//This is a stub -TODO:move this to another project
这是我所知道的唯一一个消费者必须同意只有律师才能理解的东西的产品.我确信车祸每年都会比软件事故造成更多人死亡.但是当我买车时,我没有像EULA那样签名.
那么为什么软件有EULA?是否发生了一次意外事故,导致软件公司需要保护自己?(第一个有EULA的软件是什么?)
[更新]只是为了清楚我的观点:我不明白为什么软件有EULA.没有其他我能想到的产品(甚至不是枪)!那么是什么让软件与众不同,这个产品需要某种"责任限制"?
顺便说一句,维基百科说"美国收缩包装许可证的法律地位有些不明确."
我们当前的O/RM工具并不真正允许丰富的域模型,因此我们不得不在各地使用贫血(DTO)实体.这工作正常,但我仍然在努力放置基于对象的基本业务逻辑和计算字段.
当前图层:
我们的存储库层具有大多数基本的提取/验证/保存逻辑,尽管服务层执行了许多更复杂的验证和保存(因为保存操作也执行日志记录,权限检查等).问题是在哪里放置这样的代码:
Decimal CalculateTotal(LineItemEntity li)
{
return li.Quantity * li.Price;
}
Run Code Online (Sandbox Code Playgroud)
要么
Decimal CalculateOrderTotal(OrderEntity order)
{
Decimal orderTotal = 0;
foreach (LineItemEntity li in order.LineItems)
{
orderTotal += CalculateTotal(li);
}
return orderTotal;
}
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
c# architecture dns domain-driven-design anemic-domain-model
我们有一个大的ASP.NET MVC项目,其中输出到屏幕的所有数字都被格式化为货币(即ToString("c").但是,负数显示为().例如:
decimal d = -8.88m;
Console.WriteLine(d.ToString("c"));
//outputs $(8.88)
Run Code Online (Sandbox Code Playgroud)
这对我们的用户来说有点烦人,特别是因为有文本框.我们有几千个地方可以像这样在屏幕上发送货币字段,所以我们想要一种全局改变格式的方法.有吗?我看到的所有方法都表明你必须创建一个新的格式化程序,类似于:
string curCulture = System.Threading.Thread.CurrentThread.CurrentCulture.ToString();
System.Globalization.NumberFormatInfo currencyFormat =
new System.Globalization.CultureInfo(curCulture).NumberFormat;
currencyFormat.CurrencyNegativePattern = 1;
Run Code Online (Sandbox Code Playgroud)
我们不希望改变所有的ToString("c")方法......有更好的方法吗?我的第一个想法是将我们的语言环境改为澳大利亚,但意识到日期格式化将被搞砸.
asp.net ×4
c# ×4
architecture ×3
asp.net-mvc ×3
.net ×1
c#-4.0 ×1
dns ×1
email ×1
eula ×1
grid ×1
history ×1
intellisense ×1
javascript ×1
licensing ×1
smtpclient ×1