我们的域名模型现在非常贫乏.我们的实体大多是空壳,几乎完全是为了保存值和导航到集合而设计的.
我们使用EF 4.1代码优先ORM,到目前为止的设计是为了保护我们的新手开发人员免受可怕的"LINQ to Entities无法将blablabla转换为商店表达式"异常在早期迭代期间查询上下文时的异常.
我们在EF上有各种聚合根存储库接口.然而,impls中的一些代码块似乎应该是域的责任.只要在域中声明了存储库接口,并且impl在基础结构中(注入依赖关系),将存储库接口作为参数传递给实体(或其他域)类的方法是否被认为是错误的设计?
例如,这会不好?
public class EntityAbc {
public void SaveTo(IEntityAbcRepository repos) {...}
public void DeleteFrom(IEntityAbcRepository repos) {...}
}
Run Code Online (Sandbox Code Playgroud)
如果特定实体需要访问其他聚合根存储库,该怎么办?这样可以吗,为什么?
public void Save() {
var abcRepos = DependencyInjector.Current.GetService<IEntityAbcRepository>();
var xyzRepos = DependencyInjector.Current.GetService<IEntityXyzRepository>();
// work with repositories
}
Run Code Online (Sandbox Code Playgroud)
更新1
我没有提到将代码移动到应用程序层,因为我考虑了一些使用IEntityAbcRepository来涉及业务规则实施的代码.存储库impl应尽可能为vanilla,对吧?它的主要职责应该是对ORM的简单抽象,允许您查找/添加/更新/删除实体.错误?
此外,此问题适用于其他非实体域类的方法 - 工厂,服务,任何模式可能是适当的.重点是,我问的是关于域类的任何方法的问题,而不仅仅是实体类.@Eranga,这是一个可以使用构造函数注入的地方,因为工厂和服务不是ORM的一部分.
然后,应用程序层可以通过将存储库impl注入其构造函数并将其作为参数传递给域服务或工厂来协调流.这是不好的做法吗?
更新2
在这里添加另一个澄清.如果域只需要访问IEntityAbcRepository以执行其Find()方法,该怎么办?在上面的示例中,SaveTo和DeleteFrom方法不会在存储库接口上调用任何添加/更新/删除方法.
到目前为止,为简单起见,我们在单个聚合根存储库接口上组合了find/add/update/delete方法.但我想没有什么可以阻止我们将它们分成2个接口,如下所示:
在这种情况下,将IEntityAbcReadRepository作为参数传递给域方法是不好的做法?
domain-driven-design dependency-injection repository entity-framework-4.1
我有一个UsersController
,有OnException
(有效),但是如果我Controller
继承BaseController
,OnException
那就行不通,即使我把它放进去了BaseController
.
基本上我想让我的所有控制器继承,BaseController
所以我可以在OnException
那里有一个处理程序,它可以捕获所有内容......
我在搜索表单中有一个文本框,我想附加一个组合框/自动完成小部件.在用户输入时,我想自动建议相关的地名.因此,如果用户输入"Ca",建议柬埔寨,喀麦隆,加拿大,佛得角等,排名高于北卡罗来纳州和南卡罗来纳州.如果用户输入"海",返回红海,黑海等物品,但也许不是切尔西(如果有的话,应该得分较低).我们的地名数据库非常精细和复杂,有很多数据和很多地方的替代名称/翻译.数据存储在SQL Server中,我们使用Entity Framework作为数据访问层.不用说,Places
使用LINQ to Entities 有效地查询我们的实体聚合是缓慢且低效的.
我正在研究Lucene.Net,而不是雕刻自定义SQL和索引以优化数据库搜索.今天是我测试它的第一天.大多数Lucene帮助我读过使用a StandardAnalyzer
来索引.我在几次测试中使用它时遇到了一些麻烦.例如,请考虑以下事项:
var searchTerms = new[] { "Ca", "China", "Sea", };
searchTerms = searchTerms.Concat(searchTerms.Select(x => x.ToLower())).ToArray();
var reader = IndexReader.Open(_directory, true);
foreach (var searchTerm in searchTerms)
{
var searcher = new IndexSearcher(reader);
var query1 = new WildcardQuery(new Term("OfficialName", string.Format("*{0}*", searchTerm)));
var query2 = new TermQuery(new Term("OfficialName", searchTerm));
var query3 = new QueryParser(Version.LUCENE_30, "OfficialName", new SimpleAnalyzer()).Parse(searchTerm);
var query4 = new PrefixQuery(new Term("OfficalName", searchTerm));
var query5 = new BooleanQuery();
query5.Add(query1, Occur.SHOULD);
query5.Add(query2, Occur.SHOULD); …
Run Code Online (Sandbox Code Playgroud) 我创建了一个新的免费 Slack 工作区来学习 Slack 机器人应用程序 API。我有一个动作处理程序,它监听全局快捷方式并打开一个输入模式作为响应。还有另一个操作处理程序,它侦听模态输入 Submit callback_id
,执行一些工作,然后使用trigger_id
打开另一个模态。
app.view('do_thing_b.submit', async (slack) => {
try {
await slack.ack()
console.info(`Received modal submit`)
// TODO: actual work to save the data
const view = {
type: 'modal',
callback_id: 'do_thing_b.received_submission',
title: {
text: 'Thing B Done',
type: 'plain_text',
},
blocks: [
{
type: 'section',
text: {
text: 'My Plain Text',
type: 'plain_text',
emoji: true,
},
},
],
close: {
text: 'Close',
type: 'plain_text'
}
}
const openViewParams = {
trigger_id: slack.body.trigger_id, …
Run Code Online (Sandbox Code Playgroud) 我自己制作HTML幻灯片,并且能够创建大部分内容.我被卡住的地方是键盘事件.那是向前和向后的箭头.我需要知道如何使用JavaScript或JQuery处理这些问题.按下这些按钮会触发事件,以便移动到下一张幻灯片或转到上一张幻灯片.我还想提一下,我的幻灯片也是交互式HTML,因为你可以使用它们填写数据,验证等.因此,当用户通过键盘与页面上的表单或其他内容进行交互时,我不希望键盘事件发生阻碍(例如,填写表格,日期等).怎么去这个?
我的角色提供者看起来像下面的类(删节).我在VS 2012上运行IIS Express和SQL 2012 Express,我在这个角色提供程序代码中得到了许多看似随机的异常.
public class Educ8RoleProvider : RoleProvider
{
private readonly Educ8DbContext _dbContext = new Educ8DbContext();
private readonly Authorization _authorization;
public Educ8RoleProvider()
{
_authorization = new Authorization(_dbContext);
}
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
{
try
{
base.Initialize(name, config);
}
catch (Exception ex)
{
ErrorSignal.FromCurrentContext().Raise(ex);
throw;
}
}
public override bool IsUserInRole(string username, string roleName)
{
return GetRolesForUser(username).Any(r => r.ToLower() == roleName);
}
public override string[] GetRolesForUser(string username)
{
return _authorization.GetRolesForMember(username).Select(r => r.Name).ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我Authorization …
asp.net-mvc entity-framework roleprovider ef-code-first asp.net-mvc-4
我在我的web api项目中收到了一个DTO,我想使用AutoMapper自动将我的DTO转换为我插入数据库的实体.
以下是DTO和实体的简化:
class RegistrationDTO
{
string name;
ICollection<int> Departments;
}
class Registration
{
int id;
DateTime CreatedAt;
string name;
virtual ICollection<Department> Departments;
}
class Department
{
int id;
string name;
virtual ICollection<Registration> Registrations;
}
Run Code Online (Sandbox Code Playgroud)
问题是RegistrationDTO只有部门的ID,我找不到让AutoMapper从数据库中获取部门的方法(使用Entity Framework 5).
使用自定义ValueResolver我可以将一个int列表转换为Departments列表,但是我想从数据库中获取Departments,而不是创建新的Departments.
这是我提出的解决方案,但我很确定有更好的方法:
var reg= Mapper.Map<Registration>(dto);
reg.Departments = new List<int>(dto.Departments).ConvertAll(input => Context.Departments.Find(input));
if(reg.Departments.Contains(null)) //a department provided does not exist in the database
return Request.CreateResponse(HttpStatusCode.BadRequest, "invalid department");
...
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
所以我正在开发一个模型视图控制器(MVC)项目.由于规模和复杂性,我正在努力确保组织.我成功地遇到了一个独特的困境,一个让我很难过的困境.我的问题来自我正在整合到我的网站的Jquery Rotator.
My Solution Explorer:
Images
,Scripts
和Stylesheets
.这三个子文件夹包含更具体和更细致的细节,一个例子是Scripts
包含另一个Rotator
为此jQuery实现调用的文件夹.
所以这种困境发生在View中.
此视图中的示例:
<div class = "banner-style">
<div id = "Infinite-Banner">
<div class = "banner-container">
<div class = "slides">
<img src = "~/Content/Images/Banner/Slides/One.jpg">
<img src = "~/Content/Images/Banner/Slides/Two.jpg">
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
因此,在此结构中,它似乎不会加载图像.虽然它已正确映射到目录.但是,如果您使用上面相同的结构,但将img
部分更改为:
<div class = "slide-one" />
<div class = "slide-two" />
Run Code Online (Sandbox Code Playgroud)
然后在相关的样式表中,只需background: url(~/Content/Images/Banner/Slides/One.jpg);
为 …
我似乎错过了VS 2012 RC中所有酷炫的CSS编辑器功能.例如,颜色选择器.是因为我使用评估版吗?或者是否有一个开关在发布中打开它们?
asp.net-mvc ×3
asp.net ×2
c# ×2
aop ×1
automapper ×1
css-editor ×1
javascript ×1
jquery ×1
lucene ×1
lucene.net ×1
modal-dialog ×1
repository ×1
roleprovider ×1
slack-api ×1
submit ×1
view ×1