小编jps*_*ook的帖子

域对象,POCO和实体之间有什么区别?

我觉得他们基本上都是一样的.模型对象也一样吗?

现在,在我的架构中,我有:

class Person 
{

    public string PersonId;        
    public string Name;
    public string Email;

    public static bool IsValidName() { /* logic here */ }
    public static bool IsValidEmail() { /* logic here */ }
}


class PersonService
{
    private PersonRepository pRepository;

    PersonService()
    {
        pRepository = new PersonRepository();
    }

    public bool IsExistingEmail(string email)
    {
        //calls repo method to see if email is in db
    }


    public Person GetPerson(email)
    {
        return pRepository.Get(email);
    }


    public void SavePerson(Person p)
    {
        if (Person.IsValidEmail(p.Email) && !IsExistingEmail(p.Email) …
Run Code Online (Sandbox Code Playgroud)

c# architecture asp.net domain-driven-design

73
推荐指数
4
解决办法
5万
查看次数

如何使用Dapper Dot Net从数据库结果映射到Dictionary对象?

如果我有一个简单的查询,例如:

string sql = "SELECT UniqueString, ID  FROM Table";
Run Code Online (Sandbox Code Playgroud)

我想将它映射到字典对象,例如:

Dictionary<string, int> myDictionary = new Dictionary<string, int>();      
Run Code Online (Sandbox Code Playgroud)

我怎么用Dapper这样做?

我假设它是这样的:

myDictionary = conn.Query<string, int>(sql, new {  }).ToDictionary();
Run Code Online (Sandbox Code Playgroud)

但无法弄清楚正确的语法.

c# asp.net dapper

55
推荐指数
6
解决办法
4万
查看次数

服务层如何适合我的存储库实现?

我创建了一个POCO模型类和一个处理持久性的存储库类.由于POCO无法访问存储库,因此存储库中有许多业务逻辑任务似乎不对.根据我的阅读,看起来我需要一个位于UI使用者和存储库层之间的服务层.我不确定的是它应该如何工作......

除了服务层,还应该有一个单独的业务逻辑层,还是那个服务层的角色?

每个存储库应该有一个服务吗?

服务层是UI可以实例化模型对象还是存储库为服务提供新模型实例的唯一方式?

我是否将我的参数,模型和其他验证放在服务层中进行检查以确保输入有效以及更新前数据库中是否存在要更新的项目?

模型,存储库和UI都可以调用服务层,还是仅供UI使用?

服务层应该是所有静态方法吗?

从UI调用服务层的典型方法是什么?

模型与服务层应该进行哪些验证?

以下是我现有图层的示例代码:

public class GiftCertificateModel
{
    public int GiftCerticiateId {get;set;}
    public string Code {get;set;}
    public decimal Amount {get;set;}
    public DateTime ExpirationDate {get;set;}

    public bool IsValidCode(){}
}


public class GiftCertificateRepository
{
    //only way to access database
    public GiftCertificateModel GetById(int GiftCertificateId) { }
    public List<GiftCertificateModel> GetMany() { }
    public void Save(GiftCertificateModel gc) { }
    public string GetNewUniqueCode() { //code has to be checked in db }

    public GiftCertificateModel CreateNew()
    {
        GiftCertificateModel gc = new …
Run Code Online (Sandbox Code Playgroud)

c# asp.net domain-driven-design repository repository-pattern

52
推荐指数
1
解决办法
1万
查看次数

我应该如何在类和应用程序层之间传递数据?

例如,如果我正在创建3层应用程序(数据/业务/ UI),并且数据层正在抓取单个或多个记录.在发送到业务层之前,我是否将所有内容从数据层转换为通用列表/集合?发送数据表是否可以?将信息发送回数据层怎么样?

如果我使用对象/列表,那么这些是Data或Business层的成员吗?我可以使用相同的对象传递到图层吗?

这是一些伪代码:

对象用户使用电子邮件/密码

在UI层,用户输入电子邮件/密码.UI层进行验证,然后我假设创建一个新的对象用户传递给业务层,业务层进行进一步验证并将相同的对象传递给数据层以插入记录.它是否正确?

我是.NET的新手(来自8年以上的ASP VBScript背景)并试图以"正确"的方式加快速度.

c# asp.net

35
推荐指数
3
解决办法
1万
查看次数

领域驱动设计适合我的项目吗?

我一直在阅读这本关于DDD的电子书,它说只有高度复杂的系统才适合DDD架构.这让我再次猜测我决定更多地将DDD作为我的架构.

我正在逐节将经典的ASP应用程序转换为.NET.它包括强大的产品分类方案和购物车,每天可获得约​​100-200个订单,以及类似于YouTube的视频部分(视频和社交功能,如评级,评论等).由于我已将其转换为块,因此我希望将站点的每个区域视为单独的项目.

该网站不断获得新功能,需要易于维护和更新.

现在我只是使用基本的自制ADO.NET DAL与BLL和DTO作为公共层.

在这个项目中使用与DDD不同的架构会更好吗?我是建筑学的新手,想要使用某种模式作为指导,我可以在整个转换过程中遵循这些模式,以避免可怕的意大利面条反模式.

如果不是DDD,那又怎样?仍在努力寻找一个好的方向.我需要快速,轻松地开始学习,而不是一个完整的专家,因为我还在学习.

c# architecture design-patterns domain-driven-design

12
推荐指数
1
解决办法
3191
查看次数

如何使用C#中的PBKDF2 HMAC SHA-256或SHA-512在salt和迭代中散列密码?

我想找到一个解决方案或方法,允许我添加盐并控制迭代次数.原生Rfc2898DeriveBytes基于HMACSHA1.理想情况下,使用SHA-256或SHA-512将使系统面向未来.

这是我到目前为止找到的最好的例子:http://jmedved.com/2012/04/pbkdf2-with-sha-256-and-others/ 但是当我使用SHA-256运行它时它实际上比SHA-512.我使用64k迭代,一个盐的guid和不同长度的密码进行比较.

我也找到了这个解决方案:http: //sourceforge.net/projects/pwdtknet/ ,它有完整的源代码.它看起来更强大.

到目前为止,我无法从它们中获得相同的输出.

c# asp.net encryption

11
推荐指数
1
解决办法
7557
查看次数

我的Entity Framework存储库和服务层方法应该返回哪些类型:List,IEnumerable,IQueryable?

我有一个具体的存储库实现,它返回实体的IQueryable:

public class Repository
{
    private AppDbContext context;

    public Repository()
    {
        context = new AppDbContext();
    }


    public IQueryable<Post> GetPosts()
    {
        return context.Posts;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我的服务层可以根据其他方法(其中,分页等)的需要执行LINQ

现在我的服务层设置为返回IEnumerable:

public IEnumerable<Post> GetPageOfPosts(int pageNumber, int pageSize)
{ 
    Repository postRepo = new Repository();

    var posts = (from p in postRepo.GetPosts()  //this is IQueryable
                orderby p.PostDate descending
                select p)
                .Skip((pageNumber - 1) * pageSize)
                .Take(pageSize);

    return posts;
}
Run Code Online (Sandbox Code Playgroud)

这意味着在我的代码隐藏中,如果我想绑定到转发器或其他控件,我必须执行ToList().

这是处理返回类型的最佳方法,还是在从服务层方法返回之前需要转换为列表?

c# architecture asp.net entity-framework

9
推荐指数
1
解决办法
4930
查看次数

如何处理层之间的输入和参数验证?

如果我有一个3层Web表单应用程序,它接受用户输入,我知道我可以使用表示层中的验证控件来验证该输入.我是否还应该在业务和数据层中进行验证,以防止SQL注入和问题?每层应该进行哪些验证?

另一个例子是传递ID以返回记录.数据层应该确保id有效还是应该在BLL/UI中发生?

c# asp.net

8
推荐指数
2
解决办法
2503
查看次数

我应该如何从服务层方法中公开总记录数和IEnumable分页记录集合?

我首先使用EF4代码,并拥有持久性存储库和与之交互的服务层.我有一个服务层方法,它在我的存储库上调用IQueryable方法并返回包含实体的IEnumerable.我还需要返回总记录数,以便我可以计算分页链接.

我应该如何从我的服务方法返回int和IEnumerable?

  • 在方法上使用out参数来计算总行数
  • 创建一个单独的类,其中包括总行数作为属性
  • 将分页LINQ查询移出服务层(从服务层上的repo中公开IQueryable)
  • 在服务层上创建一个完全独立的方法,只为count执行新查询.

所有这些都应该有效,但哪一个最干净?

更新: 这是对架构的一些澄清.如果这是错误的,请告诉我更好的方法(例如 - 在表示层而不是服务层进行分页等)

回购层:

返回DbSet的IQueryable,从表示层抽象出db访问

服务层:

对IQueryable执行LINQ查询以进行过滤,并根据需要使用skip和take获取页面项并返回IEnumerable(返回时也设置为List以避免任何DbContext生命周期问题)

表示层:

在Service层上调用该方法(getPagedResults(filters,pageNumber,pageSize))

从它的外观来看,我还需要添加一个单独的方法来获得总结果.希望能在一个电话中完成这一切.

我宁愿不将所有记录带回演示文稿,然后页面......似乎效率低下.

c# asp.net pagination entity-framework repository

8
推荐指数
1
解决办法
5990
查看次数

我应该使我的对象属性可以为空还是为每种类型使用CLR默认值?

我一直在试图找出处理默认值的最佳方法.将ID值设置为0是有意义的,但如果它是金钱值或其他未初始设置的值,当您在代码中稍后遇到它时,无法判断它是否已设置或设置为0.将money值设置为null,然后您知道它尚未设置.此外,在处理数据库时,很容易知道是否需要将空值写入字段而不是尝试确定它是否应该为空.

处理这个问题的方法是什么?

Class MyModel
{
    public int Id {get;set;}
    public string Title {get;set;}
    public DateTime CreatedDate {get;set;}
    public bool IsActive {get;set;}

    //CLR will automatically set these values
    Public MyModel()
    {
        Id = 0; 
        Title = String.Empty;
        CreatedDate = "1/1/0001";
        IsActive = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

VS

Class MyModel
{
    public int? Id {get;set;}
    public string Title {get;set;}
    public DateTime? CreatedDate {get;set;}
    public bool? IsActive {get;set;}

    //CLR will automatically set these values
    Public MyModel()
    {
        Id = null; 
        Title = null;
        CreatedDate …
Run Code Online (Sandbox Code Playgroud)

c# architecture asp.net

8
推荐指数
1
解决办法
2492
查看次数