- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题是opinion-based .它目前不接受答案。
想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.
1年前关闭。
Improve this question
Juile Lerman 的“EF in Enterprise”类(class)给我留下了深刻的印象,并决定构建我的演示应用程序。
我正在使用 VS 2012 和最新版本的 EF、SQL Server 和 MVC。我正在构建一个应用 SOLID 原则的演示应用程序。我这样做是为了更好地了解如何实现 DI 和单元测试。
我在这个演示应用程序中使用了 DB first 方法。它只包含一个名为 UserDetails 的表,下面是它在 SQL Server 中的外观。我将使用此表进行 CRUD 操作。
下面是我如何分层我的应用程序:
1、WES模型解决方案:该层包含我的 Model1.edmx 文件和上下文类,如下所示。
namespace WESModel
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using WESDomain;
public partial class WESMVCEntities : DbContext
{
public WESMVCEntities()
: base("name=WESMVCEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<UserDetail> UserDetails { get; set; }
}
}
namespace WESDomain
{
using System;
using System.Collections.Generic;
public partial class UserDetail:IUserDetail
{
public int Id { get; set; }
public string UserName { get; set; }
}
}
namespace WESDataLayer
{
public class UserDetailRepository : IUserDetailRepository
{
WESMVCEntities context = new WESMVCEntities();
public IQueryable<IUserDetail> All
{
get { return context.UserDetails; }
}
public IQueryable<IUserDetail> AllIncluding(params Expression<Func<IUserDetail, object>>[] includeProperties)
{
IQueryable<IUserDetail> query = context.UserDetails;
foreach (var includeProperty in includeProperties) {
query = query.Include(includeProperty);
}
return query;
}
public IUserDetail Find(int id)
{
return context.UserDetails.Find(id);
}
public void InsertOrUpdate(UserDetail userdetail)
{
if (userdetail.Id == default(int)) {
// New entity
context.UserDetails.Add(userdetail);
} else {
// Existing entity
context.Entry(userdetail).State = EntityState.Modified;
}
}
public void Delete(int id)
{
var userdetail = context.UserDetails.Find(id);
context.UserDetails.Remove(userdetail);
}
public void Save()
{
context.SaveChanges();
}
public void Dispose()
{
context.Dispose();
}
}
public interface IUserDetailRepository : IDisposable
{
IQueryable<IUserDetail> All { get; }
IQueryable<IUserDetail> AllIncluding(params Expression<Func<UserDetail, object>>[] includeProperties);
UserDetail Find(int id);
void InsertOrUpdate(UserDetail userdetail);
void Delete(int id);
void Save();
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
IUserDetailRepository repo = new UserDetailRepository();
var count = repo.All.ToList().Count().ToString();
Console.WriteLine("Count: {0}", count);
Console.ReadLine();
}
}
}
最佳答案
Question: My UI layer does not have any ref to EF DLL. However, It has an instance of Repository class. In MVC application, my controller will have an instance of repository class or UnitOfWork.
a) Is this the right thing to do ?
b) Is there any way i can abstract it ?
c) What if in future i want to swap out EF with Dapper or any other ORM tool ?
d) How do i fit my DI tool in this project ? In which layer it should be ?
e) Unit testing. I am aware of StructureMap and want to make use of it in this project in such a way that in future i should be able to swap it out with Ninject. How do i achieve this ?
关于asp.net-mvc - 在应用 SOLID 原则时需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898906/
我想知道大括号在那种情况下是什么意思? uint64 configCount = s_configCount; { s_hotVars.latestConfigDigest = c
我正在运行一个独立的单用户 v5 节点实体服务器。当我以该单个用户身份登录时,我能够在一个不存在的容器中创建一个文档,并且服务器会为我创建该容器。 例如 POST https://my.server:
我想覆盖以下继承函数: function _setBaseURI(string memory baseURI) public override(ERC721Full, ERC721Metadata
我定义了一个映射类型的状态变量,例如映射(uint256 => uint256[])。我想将其公开,以便我可以从契约(Contract)外部访问它。但是,编译器报告错误 TypeError: Wron
我正在处理 Solidity 智能合约,并且正在导入 openzeppelin-solidity 库和 chainlink 库。 两者都有 SafeMath 库;我正在用 Python 加载所有 .s
我在以下示例中遇到了 Solidity Documentation 并且在我的项目中有类似的代码并想设置 default value如果键不是从调用者传递过来的,则到 key 参数 pragma so
据我所知,有两种方法可以获得某个地址的余额。 address firstAddress; "firstAddress.balance"这将获得地址“firstAddress”的余额。 address
我正在使用 solidity 构建一个 NFT 智能合约,并且我试图在部署合约时将 Array of Structs 传递到构造函数中。但是我收到以下错误。 TypeError: Cannot rea
免费的 Everscale Solidity。如何与负责 职能部门合作?如何正确等待回调并从sdk查看合约执行结果? 例如,我有契约(Contract)(没有任何用处)。如何在我的应用程序中以正确的方
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 3 年前。 Improve
我最近在很多代码中注意到人们将硬编码的配置(如端口号等)值放在类/方法的深处,使其难以找到,也无法配置。 这是否违反了 SOLID 原则?如果不是,我是否可以向我的团队成员引用另一个“原则”来说明为什
Solidity 最近的变化将回退函数格式从只是 function() 更改为 fallback(),这对于初学者来说非常好理解发生了什么,但是我有一个问题,关于编译器在我实现时给我的建议后备。 例如
如果我有类似的东西 class square : figure {} class triangle : figure {} 这是否意味着我永远不应该使用正方形和三角形类而只能引用图形? 永远不要这样做
我正在尝试将字节可靠地转换为 uint256。这是坚固的代码, // SPDX-License-Identifier: MIT pragma solidity 0.8.13; contract Sam
我想在 SolidJS 中动态设置 JSX 标签名称。我来自 React it is fairly simple to do : /* Working ReactJS Code: */ export
我正在尝试将字节可靠地转换为 uint256。这是坚固的代码, // SPDX-License-Identifier: MIT pragma solidity 0.8.13; contract Sam
我想在 SolidJS 中动态设置 JSX 标签名称。我来自 React it is fairly simple to do : /* Working ReactJS Code: */ export
我正在继续开发 ASP.NET 应用程序(基于 Web 表单),其中以前的开发人员没有遵循良好的面向对象设计原则,即 SOLID (http://www.remondo.net/solid-princ
我创建了 ERC20 代币,我想将我的代币转移到另一个地址。 我的元掩码中有两个帐户。(帐户 A/B) 我的 ERC20 代码在这里(我在账户 A 中部署并保存了代币) pragma solidity
struct Test { uint ui; string s; } function test(Test t) public { emit Log(t.ui, t.s); } 我对 AB
我是一名优秀的程序员,十分优秀!