首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#:有什么聪明的方法来消除这些冗余代码吗?

C#:有什么聪明的方法来消除这些冗余代码吗?
EN

Stack Overflow用户
提问于 2021-08-22 01:27:19
回答 1查看 106关注 0票数 2

我继承了一个C# ASP.Net Core (现在是.Net 5.0)项目,其中有许多实体模型,如下所示:

代码语言:javascript
运行
复制
   public class Foo
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid ID { get; set; }
        [Column(TypeName = "varchar(36)")]
        public string CreatedBy { get; set; }
        public DateTime CreatedAt { get; set; }
        [Column(TypeName = "varchar(36)")]
        public string RDoxFindingsID { get; set; }
        [Column(TypeName = "varchar(36)")]
        public string LastUpdatedBy { get; set; }
        public DateTime LastUpdatedAt { get; set; }
        public string F001 { get; set; }
        ...

   public class Bar
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid ID { get; set; }
        [Column(TypeName = "varchar(36)")]
        public string CreatedBy { get; set; }
        public DateTime CreatedAt { get; set; }
        [Column(TypeName = "varchar(36)")]
        public string RDoxFindingsID { get; set; }
        [Column(TypeName = "varchar(36)")]
        public string LastUpdatedBy { get; set; }
        public DateTime LastUpdatedAt { get; set; }
        public string Q100 { get; set; }
        ... <= The same "header" fields (CreatedBy, CreatedAt, etc. etc) are copied/pasted at the top of each different model

所以我的Create和Edit剃须刀页面有很多重复的代码,如下所示:

代码语言:javascript
运行
复制
public class CreateModel : PageModel
{
    ...
    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }

        Foo.CreatedAt = DateTime.Now;
        Foo.CreatedBy = Findings.CreatedBy;
        Foo.LastUpdatedAt = DateTime.Now;
        Foo.LastUpdatedBy = Findings.CreatedBy;
        _context.Foo.Add(Foo);
        await _context.SaveChangesAsync();

        Bar.CreatedAt = DateTime.Now;
        Bar.CreatedBy = Findings.CreatedBy;
        Bar.LastUpdatedAt = DateTime.Now;
        Bar.LastUpdatedBy = Findings.CreatedBy;
        _context.Bar.Add(Bar);
        await _context.SaveChangesAsync();
       ...

问:有什么聪明的方法可以重构我的C#代码,这样我就可以为这些模型中的任何一个模型编写一个方法吗?而不复制/粘贴每条4-6行的每一种模式?

注:我不能改变模型。但是我可以用“页面”代码做任何我想做的事。

EN

回答 1

Stack Overflow用户

发布于 2021-08-22 01:39:28

这里提供了非常方便的接口,它实际上是它们的主要用途。定义通用接口并使用它。应该是这样的

代码语言:javascript
运行
复制
class Foo : IEntity
{
    public Guid ID { get; set; }
    public string CreatedBy { get; set; }
    public DateTime CreatedAt { get; set; }
    public string RDoxFindingsID { get; set; }
    public string LastUpdatedBy { get; set; }
    public DateTime LastUpdatedAt { get; set; }
}

class Bar : IEntity
{
    public Guid ID { get; set; }
    public string CreatedBy { get; set; }
    public DateTime CreatedAt { get; set; }
    public string RDoxFindingsID { get; set; }
    public string LastUpdatedBy { get; set; }
    public DateTime LastUpdatedAt { get; set; }
}

//You can name whatever you want
interface IEntity
{
    Guid ID { get; set; }
    string CreatedBy { get; set; }
    DateTime CreatedAt { get; set; }
    string RDoxFindingsID { get; set; }
    string LastUpdatedBy { get; set; }
    DateTime LastUpdatedAt { get; set; }
}

class Program
{
    public static async Task<IActionResult> OnPostAsync(IEntity entity)
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }

        entity.CreatedAt = DateTime.Now;
        entity.CreatedBy = Findings.CreatedBy;
        entity.LastUpdatedAt = DateTime.Now;
        entity.LastUpdatedBy = Findings.CreatedBy;
        _context.Foo.Add(entity);
        await _context.SaveChangesAsync();
    }

    static async void Main(string[] args)
    {
        await OnPostAsync(new Foo());
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68877857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档